在AngularJS中,如何在不进行2向数据绑定的情况下呈现值?出于性能原因,甚至可能要在给定的时间点渲染值,可能要这样做。
以下示例均使用数据绑定:
<div>{{value}}</div>
<div data-ng-bind="value"></div>
如何在value
没有任何数据绑定的情况下进行渲染?
在AngularJS中,如何在不进行2向数据绑定的情况下呈现值?出于性能原因,甚至可能要在给定的时间点渲染值,可能要这样做。
以下示例均使用数据绑定:
<div>{{value}}</div>
<div data-ng-bind="value"></div>
如何在value
没有任何数据绑定的情况下进行渲染?
ng-model
为您提供双向数据绑定:模型更改->视图更新,视图更改->模型更新。
Answers:
角度1.3+
在1.3中,Angular使用以下语法支持此功能。
<div>{{::message}}</div>
正如在这个答案中提到的。
Angular 1.2以下
这很简单,不需要插件。看一下这个。
这个小指令可以轻松完成您要实现的目标
app.directive('bindOnce', function() {
return {
scope: true,
link: function( $scope ) {
setTimeout(function() {
$scope.$destroy();
}, 0);
}
}
});
您可以像这样绑定一次
<div bind-once>I bind once - {{message}}</div>
你可以像平常一样绑定
<div ng-bind="message" bind-once></div>
你们中的某些人可能正在使用有角batarang,并且如注释中所述,如果使用此指令,则该元素在未使用时仍显示为绑定,我很确定这与附加到该元素的类有关。试试这个,它应该可以工作(未经测试)。在评论中让我知道它是否对您有用。
app.directive('bindOnce', function() {
return {
scope: true,
link: function( $scope, $element ) {
setTimeout(function() {
$scope.$destroy();
$element.removeClass('ng-binding ng-scope');
}, 0);
}
}
});
@ x0b:如果您具有OCD,并且要删除空class
属性,请执行此操作
!$element.attr('class') && $element.removeAttr('class')
看起来Angular 1.3(从beta 10开始)具有内置的一次性绑定:
https://docs.angularjs.org/guide/expression#one-time-binding
一次性绑定
以::开头的表达式被视为一次性表达式。一次性表达式一旦稳定就将停止重新计算,如果表达式结果为非不确定值,则在第一次摘要后发生(请参见下面的值稳定算法)。
使用bindonce模块。您需要包括JS文件,并将其作为依赖项添加到您的应用模块:
var myApp = angular.module("myApp", ['pasvaz.bindonce']);
该库允许您呈现仅绑定一次的项目-首次初始化时。对这些值的任何进一步更新将被忽略。这是减少页面上手表数量的好方法,因为手表呈现后不会改变。
用法示例:
<div bo-text="value"></div>
像这样使用时,将在value
可用时设置under属性,但随后将禁用手表。
$resource
。
angular-once
比较好。谢谢。
angular-once
软件包(我在此处将其发布为替代选项)。
作为替代,有angular-once
包装:
如果您使用AngularJS,存在性能问题并且需要显示大量只读数据,那么这个项目适合您!
angular-once
实际上受到启发bindonce
并提供了相似的once-*
属性:
<ul>
<li ng-repeat="user in users">
<a once-href="user.profileUrl" once-text="user.name"></a>
<a once-href="user.profileUrl"><img once-src="user.avatarUrl"></a>
<div once-class="{'formatted': user.description}" once-bind="user.description"></div>
</li>
</ul>