我查看了源代码但未找到相关的代码段。我对绑定一次的观察者以及附加它们的方式特别感兴趣。目前我已完成以下工作:
var removeNodeTypeWatcher = scope.$watch(function () {
return paneController.getNodeType();
}, function (value) {
if (value) {
scope.nodeType = value;
// as soon as the value is defined we no longer need watcher
removeNodeTypeWatcher();
}
});
答案 0 :(得分:2)
您可以使用特定表达式
像这样:::
<div>{{::item}}</div>
或
<ul>
<li ng-repeat="item in ::items">{{item}}</li>
</ul>
从角度1.3开始绑定表达式:bind once since 1.3
此外,还有特定的库,如:
修改强>
我在angularjs 1.3的源代码中找到了以下函数:
function oneTimeWatch(scope, listener, objectEquality, deregisterNotifier, parsedExpression) {
var unwatch, lastValue;
return unwatch = scope.$watch(function oneTimeWatch(scope) {
return parsedExpression(scope);
}, function oneTimeListener(value, old, scope) {
lastValue = value;
if (isFunction(listener)) {
listener.apply(this, arguments);
}
if (isDefined(value)) {
scope.$$postDigest(function() {
if (isDefined(lastValue)) {
unwatch();
}
});
}
}, objectEquality, deregisterNotifier);
}
它位于src/ng/parse.js
,从第1031行开始:oneTimeWatch
但是,在1.4中,该函数被称为
oneTimeWatchDelegate