2013-10-28 15 views
11

Chỉ thị AngularJS có ng- bắt đầu trước chúng. Tại sao nó nhấn mạnh vào việc sử dụng một tiền tố thay vì sử dụng một không gian tên xml thực tế?Tại sao AngularJS không khuyên bạn sử dụng các không gian tên XML?

Từ AngularJS's documentation:

Nếu bạn chọn để sử dụng cái cũ chỉ thị kiểu cú pháp ng: sau đó bao gồm xml-namespace trong html để làm cho IE hạnh phúc. (Đây là ở đây vì những lý do lịch sử, và chúng tôi không còn khuyến cáo sử dụng của ng :.)

Sử dụng một cái gì đó như thế này dường như làm việc:

<html xmlns:ng="http://angularjs.org" ng:app="my-app"> 

như là hiển nhiên từ this jsFiddle.

Nhưng nó không khuyên bạn nên sử dụng nó và hỗ trợ nó chỉ vì lý do lịch sử. Ai đó có thể cho tôi biết những lý do đó có thể là gì không? Đến từ một nền tảng Flex, tôi nghĩ rằng không gian tên XML là tuyệt vời và tôi rất thích sử dụng chúng, nhưng có lẽ có những lý do mạnh mẽ cho Angular để đi với phương pháp tiếp cận tiền tố?

+0

Điều này rất tò mò khi sử dụng AngularJS với SVG, vì SVG sử dụng trình phân tích cú pháp XML. Ví dụ, data- * và ng- * không hợp pháp trong SVG (tho một số trình duyệt có thể cho phép nó). Tuy nhiên, ng: * là hợp pháp trong SVG. http://stackoverflow.com/questions/15532371/do-svg-docs-support-custom-data-attributes –

Trả lời

4

Tôi đã tự hỏi về điều này. Xem xét hai dự án độc lập, "Widget Factory" và "Wombat Framework" mà mỗi phát triển chỉ thị x. Đó là preferred practice để tiền tố chỉ thị tên để tránh xung đột không gian tên, nhưng trong trường hợp này, mỗi trường hợp vẫn có thể kết thúc xác định wf-x.

Điều gì sẽ xảy ra nếu tôi sử dụng <div wf-x="something"></div> trong một ứng dụng có chứa cả hai mô-đun? Thật thú vị, góc cạnh sẽ đính kèm cả hai, liên kết từng thứ tự ưu tiên giảm dần. Nhưng tỷ lệ cược của việc tạo ra kết quả chính xác là thấp. Angular sẽ đưa ra một lỗi nếu cả hai chỉ thị cố gắng thêm một bộ điều khiển và ngữ nghĩa của hai chỉ thị và những gì chúng mong đợi cho giá trị của thuộc tính và cấu trúc của phần tử có thể dễ dàng xung đột với nhau.

Trong XML, vấn đề này được giải quyết với không gian tên. <div xmlns:wf1="..." wf1:x="something"></div> hoặc <wf1:x xmlns:wf1="..."></wf1:x> không đẹp, nhưng chúng mô tả rõ ràng chỉ thị nào chúng tôi dự định sử dụng.

Tại sao góc cạnh không hỗ trợ điều này? Các không gian tên XML là không phổ biến và có thể không được hỗ trợ tốt trong HTML nói chung, và có thể có các thách thức kỹ thuật khi phân tích cú pháp. Các chỉ thị được hỗ trợ trong các chú thích và các lớp CSS cũng như các phần tử và các thuộc tính, và : sẽ phải bị xáo trộn bằng cách nào đó trong một tên lớp. Câu trả lời đơn giản nhất mặc dù có thể là nó không phải là một vấn đề đủ phổ biến chưa yêu cầu bất cứ điều gì tiên tiến hơn so với các tiền tố mà chúng ta thấy sử dụng ngày nay. Cần lưu ý rằng phương pháp tiếp cận hiện tại của góc là phương pháp được đề xuất bởi Web Components. Khi tiêu chuẩn đó phát triển, tôi mong đợi góc cạnh để theo dõi nó. Có somediscussion về chủ đề này trong nhóm Polymer.

+0

Đánh giá từ tính linh hoạt của việc đặt tên thuộc tính, tôi đoán là Angular không phân tích cú pháp theo cách không gian tên, mà thay vào đó là áp dụng biến đổi văn bản cho tên thuộc tính đủ điều kiện, tách dấu phân cách như ":" và áp dụng camelCasing.Họ có thể khuyên bạn nên chống lại ng: bởi vì nó có thể dẫn bạn đến tin rằng bạn có thể sử dụng không gian tên như XML định nghĩa chúng. –

4

Có nguy cơ bị trói, vì góc cạnh tập trung vào chức năng mở rộng html, thay vì xml?

+1

Hmm, Loại đó có ý nghĩa. HTML5 cũng không phải là siêu dữ liệu thuần túy của XML. – Himanshu

Các vấn đề liên quan