我正在尝试在使用ngOptions的选择字段上使用AngularJS在ngModel指令的链接回调期间运行一些代码。
module.directive("ngModel",function(){
console.log('ng-model called');
return {
restrict: 'A',
priority: -1, // give it lower priority than built-in ng-model
link: function(scope, element, attr) {
console.log('watching');
scope.$watch(attr.ngModel,function(value){
if (value){
console.log("changing");
}
});
}
}
});
请参阅演示问题的小提琴:http://jsfiddle.net/d3r3zwLj/3/
第一个选择字段使用 ng-options 填充,而第二个字段的选项明确写在 html 中。 如果打开控制台,可以看到仅在更改第二个选择字段时看到"更改"消息。 更改第一个没有任何作用。
您还会立即注意到,您只看到"ng-model called"和"watching"一次,即使有两个字段带有ng-model。
我希望ngModel指令适用于这两个选择字段。 ng-options做了什么阻止ngModel工作?
谢谢!
查看文档以获取ng选项: https://docs.angularjs.org/api/ng/directive/ngOptions
"指令信息 此指令以优先级 0 执行。"
如果将指令的优先级更改为 0,它将成功运行。 我不确定所有的含义是什么,但这就是它发生的原因。
当您使用 ng-options 指令时,它有另一个可选的 ng-model 指令,该指令实际上设置了要从选项中显示的默认值。所以在你的例子中,第二个列表没有一个ng-options指令,这使得ng-model看起来像一个常规的指令。也许您可以更改指令的名称。
这是更新内置指令功能的糟糕方法,decorators
为此目的而存在。查看文档