Приложение vs. В чем разница между данными приложения?

214

В настоящее время я смотрю этот учебник для начинающих для angular.js

В какой-то момент (после 12'40 ") динамик заявляет, что атрибуты ng-app и data-ng-app="" более или менее эквивалентны внутри тега <html>, а также ng-model="my_data_binding и data-ng-model="my_data_binding". Однако говорящий говорит, что html будет проверяться с помощью различных валидаторов, в зависимости от того, какой атрибут используется.

Не могли бы вы объяснить разницу между двумя способами, префикс ng- от префикса data-ng-?

Теги:

6 ответов

396
Лучший ответ
Хороший вопрос. Разница проста: между двумя исключением нет никакой разницы в том, что некоторые валидаторы HTML5 будут вызывать ошибку в свойстве типа ng-app, но они не выдают ошибку ни за что с префиксом data- , как data-ng-app.

Итак, чтобы ответить на ваш вопрос, используйте data-ng-app, если вы хотите упростить проверку своего HTML.

Забавный факт: вы также можете использовать x-ng-app для того же эффекта.

  • 4
    Может ли префикс данных когда-либо помешать правильной работе атрибута ng? (например, «data-ng-repeat»)?
  • 2
    Похоже , что такая трата циклов процессора , чтобы вручную содрать data- и x- . Почему нельзя изменить правила проверки HTML, чтобы они принимали ng- вещи?
Показать ещё 2 комментария
56

Из Документация Angularjs

Angular нормализует тег элемента и имя атрибута для определения какие элементы соответствуют этим директивам. Обычно мы ссылаемся на директивы по их регистрозаменному имени camelCase с учетом регистра (например, ngModel). Однако, поскольку HTML нечувствителен к регистру, мы ссылаемся на директивы в DOM по нижним регистрам, обычно используя атрибуты с разделителями тире на элементах DOM (например, ng-model).

Процесс нормализации выглядит следующим образом:

Разделить x- и данные - с передней стороны элемента/атрибутов. Преобразуйте имя:, - или _-delimited в camelCase. Вот несколько эквивалентов примеры элементов, которые соответствуют ngBind:

основанный на приведенном выше описании ниже, являются действительными директивами

1. ng-bind
 2. ng: bind
 3. ng_bind
 4. data-ng-bind
 5. x-ng-bind

  • 0
    Но это делается только для сравнения с именем директивы. Это не меняет фактический атрибут.
  • 3
    Полезно знать о нотации - ,: и _
25

Различия заключаются в том, что пользовательские атрибуты data-* действительны в спецификации HTML5. Поэтому, если вам нужна ваша разметка для проверки, вы должны использовать их, а не атрибуты ng.

  • 1
    Из спецификации я понимаю, что data- * будет работать, поскольку он только проверяет HTML. Но тогда почему x- * работает? их нет в описании в описании.
  • 1
    x- * зарезервирован для использования браузером. Что касается вашего вопроса о том, ПОЧЕМУ x работает, то любой из них будет работать как угловой, в частности, проверяет, работает ли он для данных / x, кодируя его в своей структуре. Если вы спрашиваете, ПОЧЕМУ Х работает для угловых, это еще одна дискуссия. Есть хорошие аргументы для обоих. Смотрите этот ответ на SO: stackoverflow.com/a/17902387/339803 Другой ответ на этой странице, кажется, думает, что x для XHTML, но я не уверен. Посмотрите, что вы можете сделать из этого после прочтения всего этого. Спецификация HTML5 также говорит, что браузер / поставщик используют: w3.org/html/wg/drafts/html/master/single-page.html
12

Краткий ответ:

ng-model и data-ng-model являются одинаковыми и эквивалентными!


Почему?

  • причина для: data- префикса
    Спецификация HTML5 ожидает, что любой пользовательский атрибут будет префикс data-.

  • причина для: как ng-model, так и data-ng-model одинаковы и эквивалентны.

Документ AngularJS - нормализация

Angular нормализует тег элемента и имя атрибута, чтобы определить, какие элементы соответствуют этим директивам. Обычно мы ссылаемся на директивы с учетом нормального имени camelCase своего регистра, например (ngModel). Однако, поскольку HTML не чувствителен к регистру, мы ссылаемся на директивы в DOM по строчным формам, как правило, используя атрибуты тире с разделителями на элементах DOM (например, ng-model).

Процесс нормализации выглядит следующим образом:
1. Разделите x- и data- с передней стороны элемента/атрибутов.
2. Преобразуйте :, - или _ -delimited name в camelCase.

Например
следующие формы эквивалентны и соответствуют директиве ngBind:

<div ng-controller="Controller">
  Hello <input ng-model='name'> <hr/>
  <span ng-bind="name"></span> <br/>
  <span ng:bind="name"></span> <br/>
  <span ng_bind="name"></span> <br/>
  <span data-ng-bind="name"></span> <br/>
  <span x-ng-bind="name"></span> <br/>
</div>
2

Вы можете использовать data-ng- вместо ng-, если вы хотите сделать свой HTML-код действительным.

  • 2
    ФП понимает, что их можно использовать взаимозаменяемо, но хочет знать, почему они доступны, если они работают «одинаково». Я полагаю, что объяснение того, что отличает их, было бы более ценным ответом.
1

если вы хотите манипулировать html или html-фрагментами на своем сервере перед его службой в браузер, вы определенно хотите использовать атрибуты data-ng-xxx вместо атрибутов ng-xxx.

  • Это делает ваш html действительным, то есть он может использоваться анализаторами html (на сервере), такими как domdocument (php) или другими. Эти парсеры часто терпят неудачу на плохо сформированном html.
  • Angular нормализует атрибут, но помните, что на клиенте, а не на сервере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню