Разница между ng-bind и интерполяцией {{}} в Angular
Есть ли разница между
{{}} и ng-bind в angular.
Я новичок в angular. Я начал с использования {{}}, а затем в документации я нашел ng-bind. Я думаю, что они выполняют ту же работу, но тогда почему дополнительная директива, если не тогда, скажите разницу.
Ответы
Ответ 1
В официальных документах есть некоторый намек: https://docs.angularjs.org/api/ng/directive/ngBind
Как правило, вы не используете ngBind напрямую, но вместо этого вы используете двойная курчавая разметка, подобная {{expression}}, которая аналогична, но меньше многословным.
Предпочтительно использовать ngBind вместо {{expression}}, если шаблон мгновенно отображается браузером в его исходном состоянии перед Angular скомпилирует его. Поскольку ngBind является атрибутом элемента, он делает привязки невидимыми для пользователя во время загрузки страницы.
Ответ 2
Наиболее очевидным отличием между ними является Flash of Unstyled content при использовании {{ ... }}
.
Тем не менее, существует более тонкое различие между ними, если объект, который вы передаете в {{ obj }}
и ng-bind="obj"
, не строка.
Из fooobar.com/questions/14284/...:
В зависимости от того, используете ли вы синтаксис {{ ... }}
или ng-bind
, .toJSON
и функция .toString
на вашем объекте будет вызвана для определения его представления.
Ответ 3
{{}} может мигать при загрузке страницы, ng-bind корректно скрывает выражение, пока оно не будет правильно отображаться.
Ответ 4
В директиве AngularJs ng-bind работает как альтернатива директиве интерполяции {{}}. Вставив атрибут ng-bind в элемент HTML, мы можем вставить в него данные AngularJS.
Вот пример:
<div ng-controller="DemoController" >
<span ng-bind="demoData.doThis()"></span>
</div>
Разница в ключах - это атрибут ng-bind, который не отображает содержимое Html при загрузке страницы, где в качестве интерполяционной директивы отображается как флэш-контент без стиля при загрузке страницы.
Ответ 5
В дополнение к вышеупомянутым ответам
Проблемы производительности с интерполяцией:
Как объяснено в этой нить лучше,
ng-bind
является директивой и помещает наблюдателя в переданную переменную. Таким образом, ng-bind
будет применяться только тогда, когда переданное значение действительно изменится.
Скобки, с другой стороны, будут грязно проверены и обновлены в каждом $digest, даже если это не необходимо.
Ответ 6
Иногда, когда мы загружаем наше приложение в браузере, мы можем заметить мигающий контент за несколько миллисекунд, прежде чем {{name}} будет разрешен и данные будут загружены.
Это происходит потому, что шаблон загружен до того, как у AngularJS появилась возможность войти и скомпилировать элементы. Чтобы решить эту проблему, вы можете использовать директиву ng-cloak.
В первом подходе (т.е. {{}}) AngularJS оценивает выражение, затем заменяет его некоторым значением, которое когда-то остается с мигающими двойными фигурными скобками, но ng-bind сохраняет это время, сообщая AngularJS, чтобы поместить содержимое выражение внутри самого элемента.
Примечание:
{{}} иногда вызывают проблемы с производительностью, если у нас есть тысяча привязок на нашей странице. В этих сценариях мы должны пойти с ng-bind.
Ответ 7
Основное различие между ng-bind и {{}} заключается в том, что ng-bind создает наблюдателя для переменной, переданной ему, в то время как фигурные скобки ({{}}) будут (хранить все выражение в памяти, т.е. выполнять грязные - проверка и обновление выражения в каждом цикле дайджеста, даже если это не требуется.
ng-bind будет применяться только тогда, когда фактически пройденное значение изменяется.
Ответ 8
Другим отличием является способ отображения данных ng-bind
и interpolation
.
ng-bind
вызывает метод toString()
, тогда как interpolation
использует настраиваемую функцию "stringify".
Пример
<div ng-controller="showClockCtrl">
<p>The current time is {{currentDateTime}}.</p>
<p>The current time is <span ng-bind="currentDateTime"></span>.</p>
</div>
<div ng-controller="showClockCtrl">
<p>MyObject is {{myObject}}</p>
<p>MyObject is <span ng-bind="myObject"></span></p>
</div>
<script>
var showClockCtrl = function ($scope) {
$scope.currentDateTime = new Date();
$scope.myObject = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
}
};
</script>
Выход
The current time is "2017-11-18T15:09:59.429Z".
The current time is Sat Nov 18 2017 10:09:59 GMT-0500 (EST).
MyObject is {"key1":"value1","key2":"value2","key3":"value3"}
MyObject is [object Object]