2014-10-08 57 views
3

我似乎无法获得一次性绑定工作。我的实际应用逻辑对于闯入者来说有点过于复杂,但我甚至无法得到像这样的简单场景http://plnkr.co/edit/ka57xquoR2ZdY2F0li76在我的应用中工作。我的确切代码到文件结构的Here is the plunker。我删除了应用程序中的所有物质,以获得最简单的一次性绑定示例的工作方式 - 它可以在plunker中运行,但不能在我的代码中运行。为什么这个时间绑定表现得好像它不在那里一样?

我使用AngularJS 1.3.0 rc.4

这里是一个什么样的在plunker

{{::current.text}} 
<br /> 
{{current.text}} 
<br /> 
<input ng-model="current.text" type="text" /> 
<br /> 

在我的应用程序的一个片段都{{::current.text}}{{current.text}}当文本框会更新更新。 ..

有什么可以关闭或一次性绑定或阻止范围变量的解决,所以一次绑定可以踢?

回答

21

原来这是导致此行为的Batarang(chrome的angularjs调试扩展)。我的猜测是,它的持续监控阻止了范围变量的解决,因此一次性绑定没有踢入。

+1

这是github上的问题 https://github.com/angular/angularjs-batarang/issues/140 – 2014-12-08 20:02:14

+1

哦,我的上帝THANKYOU !!!!! 只花了整整一个下午,试图找出这一点。你已经救了我的理智。所有的插件我几乎没有使用! – eurobob 2016-09-17 08:52:01

2

正如Richard Hermanson指出的那样,您必须删除所有与该错误无关的html,直到您有一个子集足够简单,以便了解导致该错误的原因。

如果您想要随机猜测,也许一次绑定的元素包含在本身在DOM中重建的元素中,因此bind-once每次都会重新初始化。

例如

<div ng-if="someOndition"> 
    <div>{{::current.text}}</div> 
</div> 

每次NG-如果从虚假到真实的推移,它的内部HTML重新编译,并添加到DOM。这可能不是你的问题,但我唯一能看到的是重新编译指令。

0

我遇到的稍微不同的情况是,表达式返回的结果与某种方式有关当前时间以毫秒为单位,因此足够精细,以便在摘要循环中可能多次调用的每个返回不同结果。

就我而言,虽然一次性约束表达式在当前摘要周期结束时已被标记为取消注册,但表达式在相同摘要周期内被多次重新评估,只要我可以收集。这是造成超标,并导致控制台日志错误消息摘要迭代限制被喷出了像下面这样:

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! Watchers fired in the last 5 iterations: 
[[{"msg":"fn: oneTimeWatch","newVal":"1475668099352","oldVal":"1475668099346"}], 
[{"msg":"fn: oneTimeWatch","newVal":"1475668099356","oldVal":"1475668099352"}], 
[{"msg":"fn: ... 

在我的具体情况,保证后面的表达式总是返回相同的值给定输入对该输入的第一次调用允许一次性绑定正常工作。有点反直觉,这就是为什么它让我发现,但也许这对别人有用!

相关问题