AngularJS ngModel 指令,带有选择字段和 ngOptions



我正在尝试在使用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为此目的而存在。查看文档

最新更新