Zacząłem uczyć się o AngularJS i nie wiem, jakie są różnice między dyrektywami ng-app
i data-ng-app
.
Zacząłem uczyć się o AngularJS i nie wiem, jakie są różnice między dyrektywami ng-app
i data-ng-app
.
Odpowiedzi:
Większość z tych odpowiedzi po prostu mówi, że szablon jest prawidłowym kodem HTML lub zgodnym z walidatorem HTML , bez wyjaśniania również, co te terminy oznaczają.
Nie wiem na pewno, ale zgaduję, że te warunki mają zastosowanie do programów walidacyjnych HTML, które skanują Twój kod pod kątem zgodności ze standardami - trochę jak kłaczki. Nie rozpoznają ng-app
jako prawidłowego atrybutu. Oczekują, że atrybuty HTML inne niż domyślne będą poprzedzone
data-attribute_name_here
.
Dlatego twórcy AngularJS
stworzyli alternatywne nazwy dla swoich dyrektyw, które zawierają data-
przed sobą znak przed nimi, aby programy walidatorów HTML „polubiły” je.
Brak, jeśli chodzi o zachowanie środowiska uruchomieniowego, to tylko różne style dyrektyw nazewnictwa, jak opisano tutaj: http://docs.angularjs.org/guide/directive
Dyrektywy mają nazwy z wielbłądami, takie jak ngBind. Dyrektywę można wywołać, tłumacząc nazwę przypadku wielbłąda na skrzynkę węża za pomocą tych znaków specjalnych:, - lub _. Opcjonalnie dyrektywa może być poprzedzona przedrostkiem x- lub data-, aby była zgodna z walidatorem HTML. Oto lista niektórych możliwych nazw dyrektyw: ng: bind, ng-bind, ng_bind, x-ng-bind i data-ng-bind.
Jak widać z lektury tego tekstu, data-
może on zostać użyty do przejścia przez HTML testów walidatora HTML /
Możesz zadeklarować kątową przestrzeń nazw <html xmlns:ng="http://angularjs.org" ng-app>
W nowoczesnych przeglądarkach nie ma różnicy, ale w starszych IE nie będą działać, dopóki nie zadeklarujesz definiującej ją przestrzeni nazw XML.
Istnieje również różnica w walidacji polegająca na tym, że ng-app
nie jest to prawidłowy XHTML i spowoduje, że Twoja strona internetowa nie przejdzie walidacji HTML. Angular pozwala na przedrostek swoich dyrektyw za pomocą data-
lub x-
zezwalanie na walidację.
Możesz użyć data-ng- zamiast ng-, jeśli chcesz, aby kod HTML strony był prawidłowy.
To będzie rzucać błąd
<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>
To nie spowoduje błędu
<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>
Podstawowa różnica między tymi dwoma terminami polega na tym, że data-ng-app sprawdza poprawność kodu HTML, a druga nie. Funkcjonalność pozostaje taka sama. Aby uzyskać więcej informacji, możesz wypróbować w3Validator.
Absolutnie nie ma między nimi różnicy, z wyjątkiem tego, że niektóre walidatory HTML5 będą zgłaszać błąd we właściwości, takiej jak ng-app, ale nie zgłaszają błędu dla niczego, co ma prefiks data-, jak data-ng-app. Zatem używanie przedrostka danych z naszymi dyrektywami kątowymi jest dobre.
Nawet ty możesz używać dyrektyw kątowych na wymienione poniżej sposoby ng-bind, ng: bind, ng_bind, data-ng-bind, x-ng-bind