如何通过 javascript 设置 ngModelOptions?

How to set ngModelOptions by javascript?

我正在创建一个自定义指令,这个指令需要元素的句柄 ngModelOptions,也许我可以用 jQuery 选择器来改变元素 html,但我想要知道我是否可以 javascript 这样做以获得更好的一致性


更新 1

因为我需要为表单中的所有输入设置 ngModelOptions="{updateOn:'blur'}

所以我想创建一个指令来执行此操作,可能 <input type='text' updateBlur/>

我想知道是否可以用代码设置这个选项,可能是这个

myElement.attrs.ngModelOptions.updateOn = "blur default";

请更具体地说明您的问题。

一般问题的答案是,如果您使用 angular.

,则不应使用 jQuery 选择器来操纵 DOM

如果您需要操作 ngModelOptions 属性,您应该在指令中使用 link 函数的参数进行操作:

link: function(scope, element, attrs){ 
   ...
//if you want to change the ngModelOptions attribute
$(element).attr('ng-model-options', 'whatever')
}

更详细的解释: https://docs.angularjs.org/guide/directive

您必须在 "angular way" 中执行此操作,因此您应该在指令中执行以下操作:

angular.module("myApp").directive('myDirective', function($compile){
    link: function(scope, element, attrs) {
         scope.$watch( 'scope.someValue', function(){
            element.attr('ng-model-options', "new value");
            $compile(element.contents())(scope);
         });

    }
});

通过这种方式,您可以检查 scope.someValue 的更改,并将新值应用于指令。您不能使用 jquery 执行此操作,因为 angularJS 不会获得更改。

但是,使用这个 $compile(element.contents())(scope); 就可以了。

编辑$scope.apply(),不应该工作。因为有必要强制进行摘要循环(例如将更多元素添加到数组中)。这里改了结构,需要重新编译