渲染没有数据绑定的值
在AngularJS中,如何在没有双向数据绑定的情况下渲染一个值? 有人可能会出于性能考虑,甚至在给定的时间点提供价值。
以下示例都使用数据绑定:
<div>{{value}}</div>
<div data-ng-bind="value"></div>
如何在没有任何数据绑定的情况下呈现value
?
angular1.3+
在1.3中,Angular使用下面的语法支持这个。
<div>{{::message}}</div>
正如在这个答案中提到的。
angular1.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>
演示: http : //jsfiddle.net/fffnb/
你们中的一些人可能正在使用有angular度的batarang,正如在注释中提到的那样,如果你使用这个指令,这个元素仍然显示为绑定的时候,我确信这与附加到元素的类有关试试这个,它应该工作(没有testing) 。 让我知道,如果它为你工作的意见。
app.directive('bindOnce', function() { return { scope: true, link: function( $scope, $element ) { setTimeout(function() { $scope.$destroy(); $element.removeClass('ng-binding ng-scope'); }, 0); } } });
@ x0b :如果你有强迫症 ,你想删除空的class
属性做到这一点
!$element.attr('class') && $element.removeAttr('class')
它看起来像Angular 1.3(从beta 10开始)有一次性绑定内置:
https://docs.angularjs.org/guide/expression#one-time-binding
一次性绑定
以::开始的expression式被认为是一次性expression式。 一次性expression式一旦稳定就会停止重新计算,如果expression式结果是一个非未定义的值(见下面的值稳定algorithm),则会在第一个摘要之后发生。
使用绑定模块 。 您需要包含JS文件,并将其作为依赖项添加到您的应用程序模块中:
var myApp = angular.module("myApp", ['pasvaz.bindonce']);
这个库允许你渲染只绑定一次的项目 – 当它们初次被初始化的时候。 对这些值的进一步更新将被忽略。 这是一个很好的方法来减less页面上的手表数量,在它们被渲染后不会改变。
用法示例:
<div bo-text="value"></div>
如果这样使用,一旦可用,属性value
将被设置,但是手表将被禁用。
@OverZealous和@Connor之间的比较答案:
用传统的ng重复的angular度:15行2000行和420mo的RAM( Plunker )
使用ngRepeat和@OverZealous的模块:7行2000行和240mo的RAM( Plunker )
使用ngRepeat和@Connor的指令:对于2000行和500mo的RAM( Plunker )
我使用Google Chrome 32进行了testing。
作为替代,有angular-once
包装:
如果您使用AngularJS,有性能问题,需要显示大量的只读数据,这个项目是给你的!
angular-once
实际上是受bindonce
启发,并提供了类似angular-once
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>