有没有办法在模板中只评估一次AngularJS表达式(即没有数据绑定)?

时间:2013-05-15 07:23:08

标签: angularjs

用一个例子说明我的问题可能是最好的。

以下是模板代码段:

<div class="title">{{action}} Location</div>

Double curly markup告诉AngularJS针对当前范围 AND 评估action以创建与action的数据绑定。

有没有办法告诉AngularJS一次评估action并完成(即我不需要数据绑定/监视)?

4 个答案:

答案 0 :(得分:4)

我无法在Angular中找到interporate once功能的直接支持。 但是你可以通过使用单独的变量轻松解决它 从action复制一次,之后再也不会更改。

在您的控制器中:

$scope.action0 = action;

在你的模板中:

<div class="title">{{action0}} Location</div>

编辑:另一种方法是定义一个插值一次的指令 并且不管它。

http://plnkr.co/edit/6Ul1QgqhNH0bqK2af2Jo?p=preview

js:

app.directive('staticBind', function(){
  return function(scope, elem, attrs) {
    elem.text( scope[ attrs.staticBind ]);
  };
});

模板:

<span static-bind="variable"></span>

答案 1 :(得分:3)

我从Angular邮件列表中找到了Pasvaz's bindonce module,这是另一种更适合我需要的解决方案。

UPDATE 10/27/2014:从v1.3开始,AngularJS核心支持one-time binding

答案 2 :(得分:2)

我遇到了同样的问题。我想评估表达式,但我不想显示它。所以我找到了一个解决方案,只需将您想要在ng-hide div中评估的表达式设置为false,并将ng-hide设置为false,如

<div ng-hide="true">{{your expression here}}</div>

它将执行表达式而不显示内容

答案 3 :(得分:0)

设置要在该模板中使用的范围时,请使用angular.copy。 Angular不会将var设置为副本。 angular.copy用于存储watchExpression的当前值的值,以供稍后比较。