ng-app vs. data-ng-app, what is the difference?
I'm currently looking at this start tutorial video for angular.js
At some moment (after 12'40"), the speaker states that the attributes ng-app
and data-ng-app=""
are more or less equivalent inside the <html>
tag, and so are ng-model="my_data_binding
and data-ng-model="my_data_binding"
. However The speaker says the html would be validated through different validators, depending on which attribute is used.
Could you explain the difference between the two ways, ng-
prefix against data-ng-
prefix ?
Solution 1:
Good question. The difference is simple - there is absolutely no difference between the two except that certain HTML5 validators will throw an error on a property like ng-app
, but they don't throw an error for anything prefixed with data-
, like data-ng-app
.
So to answer your question, use data-ng-app
if you would like validating your HTML to be a bit easier.
Fun fact: You can also use x-ng-app
to the same effect.
Solution 2:
From Angularjs Documentation
Angular normalizes an element's tag and attribute name to determine which elements match which directives. We typically refer to directives by their case-sensitive camelCase normalized name (e.g. ngModel). However, since HTML is case-insensitive, we refer to directives in the DOM by lower-case forms, typically using dash-delimited attributes on DOM elements (e.g. ng-model).
The normalization process is as follows:
Strip x- and data- from the front of the element/attributes. Convert the :, -, or _-delimited name to camelCase. Here are some equivalent examples of elements that match ngBind:
based on above statement below all are valid directives
1. ng-bind
2. ng:bind
3. ng_bind
4. data-ng-bind
5. x-ng-bind
Solution 3:
The differences lies in the fact that custom data-*
attributes are valid in the HTML5 specification. So if you need your markup to be validated, you should use them rather than the ng
attributes.