gpt4 book ai didi

javascript - Angular 如何实现绑定(bind)一次指令?

转载 作者:行者123 更新时间:2023-12-02 16:27:16 25 4
gpt4 key购买 nike

我查看了源代码,但没有找到相关的代码片段。我对绑定(bind)一次观察者以及附加它们的方式特别感兴趣。目前我已完成以下操作:

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();
}
});

最佳答案

可以使用特定的表达方式

::

像这样:

<div>{{::item}}</div>

<ul>  
<li ng-repeat="item in ::items">{{item}}</li>
</ul>

自 Angular 1.3 起绑定(bind)表达式一次:bind once since 1.3

此外,还有一些特定的库,例如:

angular-oncebindonce

编辑:

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

关于javascript - Angular 如何实现绑定(bind)一次指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com