我在其中一个角度演示和会议中提到的人之一ng-bind
比{{}}
绑定更好。
一个原因,ng-bind
将变量放在观察列表中,只有当模型发生变化时才会推送数据查看,另一方面,{{}}
每次都会插入表达式(我猜是角度循环)并推送值,即使值改变或不改变。
也有人说,如果你在屏幕上的数据不多,你可以使用{{}}
,性能问题将不可见。有人可以为我解释一下这个问题吗?
我在其中一个角度演示和会议中提到的人之一ng-bind
比{{}}
绑定更好。
一个原因,ng-bind
将变量放在观察列表中,只有当模型发生变化时才会推送数据查看,另一方面,{{}}
每次都会插入表达式(我猜是角度循环)并推送值,即使值改变或不改变。
也有人说,如果你在屏幕上的数据不多,你可以使用{{}}
,性能问题将不可见。有人可以为我解释一下这个问题吗?
能见度:
当您的 angularjs 正在引导时,用户可能会在 html 中看到您放置的括号。这可以通过ng-cloak
. 但对我来说,这是一种解决方法,如果我使用ng-bind
.
表现:
该{{}}
是慢得多。
这ng-bind
是一个指令,将在传递的变量上放置一个观察者。所以ng-bind
只有当传递的值确实改变时才适用。
另一方面,括号将在每个 中进行脏检查和刷新,即使它不是必需的。 $digest
我目前正在构建一个大型单页应用程序(每个视图约 500 个绑定)。从 {{}} 更改为严格ng-bind
确实为我们节省了大约 20% 的scope.$digest
.
建议:
如果您使用诸如angular-translate 之类的翻译module,请始终在括号注释之前使用指令。
{{'WELCOME'|translate}}
=> <span ng-translate="WELCOME"></span>
如果您需要过滤器功能,最好选择一个指令,它实际上只使用您的自定义过滤器。 $filter 服务的文档
28.11.2014 更新(但可能偏离主题):
在 Angular 1.3xbindonce
中引入了该功能。因此,您可以绑定一次表达式/属性的值(将在 != 'undefined' 时绑定)。
当您不希望绑定更改时,这很有用。
用法: 放置::
在绑定之前:
<ul>
<li ng-repeat="item in ::items">{{item}}</li>
</ul>
<a-directive name="::item">
<span data-ng-bind="::value"></span>
例子:
ng-repeat
输出表中的一些数据,每行有多个绑定。翻译绑定,过滤输出,在每个范围摘要中执行。
如果您不使用ng-bind
,而是使用以下内容:
<div>
Hello, {{user.name}}
</div>
您可能会Hello, {{user.name}}
在user.name
解析之前看到实际一秒钟(在加载数据之前)
你可以做这样的事情
<div>
Hello, <span ng-bind="user.name"></span>
</div>
如果这对你来说是个问题。
另一种解决方案是使用ng-cloak
.
ng-bind
比 {{...}}
例如,你可以这样做:
<div>
Hello, {{variable}}
</div>
这意味着Hello, {{variable}}
由 包围的整个文本<div>
将被复制并存储在内存中。
如果你做这样的事情:
<div>
Hello, <span ng-bind="variable"></span>
</div>
只有值的值会存储在内存中,angular 会注册一个仅由变量组成的观察者(观察表达式)。
基本上双curl语法更自然可读并且需要更少的输入。
两种情况都会产生相同的输出,但是.. 如果您选择使用{{}}
,则用户可能会{{}}
在 angular 渲染模板之前看到几毫秒。因此,如果您注意到任何,{{}}
则最好使用ng-bind
.
同样非常重要的是,只有在你的 angular 应用程序的 index.html 中,你才能有 un-rendered {{}}
。如果您使用指令那么模板,则没有机会看到这一点,因为 angular 首先渲染模板,然后将其附加到 DOM。
{{...}}
是指双向数据绑定。但是,ng-bind实际上是用于单向数据绑定。
使用ng-bind将减少页面中的观察者数量。因此ng-bind将比{{...}}
. 因此,如果您只想显示一个值及其更新,并且不想将其从 UI 的更改反映回控制器,那么请选择ng-bind。这将提高页面性能并减少页面加载时间。
<div>
Hello, <span ng-bind="variable"></span>
</div>