我试图通过在大多数地方使用一次性绑定(::)来保持我的手表。
但是,我遇到了需要等待对象的一个属性从我们的服务器到达的情况。
有没有我可以两次进行Angular绑定(首先是占位符,第二个是实际值)?
我尝试使用bindonce完成此操作,但它似乎不起作用(我猜这是因为bindonce想要观看整个对象,而不是单个属性)。
另一种解决方案是,如果可以的话,我可以在值进入后以某种方式从模板中删除手表。
我的对象看起来像这样:
{
name: 'Name',
id: 'Placeholder'
}
我的模板:
<div ng-repeat="object in objects">
{{::object.name}}
{{::object.id}}
</div>
ID会在应用程序生命周期中改变一次,只会永久改变一个值,只有在我们在列表中包含许多这些对象时才会感到浪费的值。
答案 0 :(得分:1)
我认为这就是你要找的! Plunkr
我刚刚编写了一个bind-two指令,如果我没有完全错过这个问题,它应该解决你的问题:
directive("bindTwice", function($interpolate) {
return {
restrict: "A",
scope: false,
link: function(scope, iElement, iAttrs) {
var changeCount = 0;
var cancelFn = scope.$watch(iAttrs.bindTwice, function(value) {
iElement.text(value === undefined ? '' : value);
changeCount++;
if (changeCount === 3) {
cancelFn();
}
});
}
}
});
我所做的是,我在我们需要观看的范围元素上添加一个观察者,并像ng-bind
一样更新内容。但是当changeCount
达到限制时,我只需取消$watch
从监视列表中有效清除它。
用法:
<body ng-controller="c1">
<div ng-repeat="t in test">
<p>{{ ::t.binding }}</p>
<p bind-twice="t.binding"></p>
<p>{{ t.binding }}</p>
</div>
</body>
请参阅Plunkr了解工作示例。