Tôi đã bắt đầu tìm hiểu về AngularJS và bối rối về sự khác biệt giữa các chỉ thị ng-app
và data-ng-app
chỉ thị.
Tôi đã bắt đầu tìm hiểu về AngularJS và bối rối về sự khác biệt giữa các chỉ thị ng-app
và data-ng-app
chỉ thị.
Câu trả lời:
Hầu hết các câu trả lời này chỉ đơn giản là làm cho mẫu HTML hợp lệ hoặc tuân thủ Trình xác thực HTML , mà không giải thích các thuật ngữ THOSE có nghĩa là gì.
Tôi không biết chắc chắn, nhưng tôi đoán rằng các điều khoản này áp dụng cho các chương trình xác thực HTML quét mã của bạn để tuân thủ các tiêu chuẩn - giống như lint. Họ không công nhận ng-app
là một thuộc tính hợp lệ. Họ hy vọng các thuộc tính HTML không mặc định sẽ được mở đầu bằng
data-attribute_name_here
.
Vì vậy, những người tạo ra AngularJS
đã tạo ra các tên thay thế cho các chỉ thị của họ bao gồm data-
phía trước chúng để các chương trình xác thực HTML sẽ "thích" chúng.
Không có gì về hành vi thời gian chạy, đó chỉ là những cách đặt tên khác nhau như được mô tả ở đây: http://docs.angularjs.org/guide/directive
Chỉ thị có tên vỏ lạc đà như ngBind. Lệnh này có thể được gọi bằng cách dịch tên trường hợp lạc đà thành trường hợp rắn với các ký tự đặc biệt này :, - hoặc _. Tùy chọn chỉ thị có thể được bắt đầu bằng x- hoặc dữ liệu - để làm cho trình xác thực HTML tuân thủ. Dưới đây là danh sách một số tên chỉ thị có thể có: ng: bind, ng-bind, ng_bind, x-ng-bind và data-ng-bind.
Như bạn có thể thấy từ việc đọc này, data-
có thể được sử dụng để làm cho HTML của bạn vượt qua các bài kiểm tra trình xác thực HTML /
Bạn có thể khai báo không gian tên góc <html xmlns:ng="http://angularjs.org" ng-app>
Trong các trình duyệt hiện đại không có sự khác biệt, nhưng trong các IE cũ hơn, chúng sẽ không hoạt động trừ khi bạn khai báo một không gian tên XML xác định nó.
Ngoài ra còn có một sự khác biệt về xác thực trong đó ng-app
không phải là XHTML hợp lệ và sẽ khiến trang web của bạn không thể xác thực HTML. Angular cho phép bạn thêm tiền tố vào các chỉ thị của nó bằng data-
hoặc x-
cho phép nó xác nhận.
Bạn có thể sử dụng dữ liệu-ng-, thay vì ng-, nếu bạn muốn làm cho trang HTML của mình hợp lệ.
Điều này sẽ gây ra lỗi
<div ng-app="">
<p>Input something in the input box:</p>
<p>Name: <input type="text" ng-model="name"></p>
<p ng-bind="name"></p>
</div>
Điều này sẽ không gây ra lỗi
<div data-ng-app="scope" data-ng-init="name='test'">
<p>Input something in the input box:</p>
<p>Name: <input type="text" data-ng-model="name"></p>
<p data-ng-bind="name"></p>
</div>
Sự khác biệt cơ bản giữa hai thuật ngữ này là dữ liệu-ng-app xác nhận HTML trong khi thuật ngữ sau không. Chức năng vẫn giữ nguyên. Để tham khảo thêm, bạn có thể thử w3Validator.
Hoàn toàn không có sự khác biệt giữa hai loại này, ngoại trừ một số trình xác thực HTML5 nhất định sẽ gây ra lỗi trên một thuộc tính như ng-app, nhưng chúng không gây ra lỗi cho bất kỳ thứ gì có tiền tố- như data-ng-app. Vì vậy, sử dụng tiền tố dữ liệu với các chỉ thị góc của chúng tôi là tốt.
Thậm chí bạn có thể sử dụng các chỉ thị góc trong các cách được đề cập dưới đây ng-bind, ng: bind, ng_bind, data-ng-bind, x-ng-bind