渲染没有数据绑定的值

在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>