【发布时间】:2014-08-23 23:12:49
【问题描述】:
我无法理解为什么对 ngModel 的更改不会从一个指令传播到另一个指令。 Here's a plunker that shows a simplified version of what we're trying to do.
基本上,我已经声明了一个使用 ngModel 的指令和一个隔离范围:
.directive('echo', function() {
var link = function(scope, element, attrs, ngModel) {
// --- 8< ---
scope.$watch(attrs['ngModel'], function() {
scope.model = ngModel.$modelValue;
console.log("***** Echo model updated: ", scope.model);
});
};
return {
restrict: 'E',
require: 'ngModel',
link: link,
scope: {
id: "="
}
}
})
该指令然后被另一个指令包装,同样依赖于 ngModel 并具有隔离范围:
.directive('wrapper', function() {
var link = function(scope, element, attrs, ngModel) {
scope.$watch(attrs['ngModel'], function() {
var model = ngModel.$modelValue;
console.log("----- Wrapper model updated", model);
scope.model = model;
})
};
return {
restrict: 'E',
require: 'ngModel',
link: link,
scope: {
},
template: "<div><h2>Echo:</h2> <echo id='myEcho' ng-model='model'></echo></div><div><h2>Model text:</h2>{{ model.text }}</div>"
}
})
您可以看到“包装器”指令需要ngModel,echo 指令也是如此。
当我在我的 HTML 中使用“wrapper”指令,然后我将一个值推送到 ngModel 中时,“wrapper”指令会正确识别模型已更改(console.log 显示了这一点)。那时,包装器指令然后更新其范围内的模型,我希望 预期会将该模型更新传播到“echo”指令中。
但是,观察控制台,“echo”指令永远不会看到模型得到更新。
问:为什么“echo”指令看不到“wrapper”指令的更新模型?
注意:这可能会稍微复杂一点,因为“echo”不是仅从“包装器”指令中消耗的 - 有时它是直接消耗的。
【问题讨论】:
-
关于
the dot的 3 分钟视频可能会对您有所帮助 egghead.io/lessons/angularjs-the-dot -
谢谢,不过我认为这不是问题所在。这个答案是对该视频的一个很好的解释:stackoverflow.com/questions/14049480/…
标签: javascript angularjs angularjs-directive angularjs-scope