如何通过javascript设置ngModelOptions?

时间:2015-02-18 13:37:10

标签: javascript angularjs directive

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


更新1

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

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

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

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

2 个答案:

答案 0 :(得分:2)

你必须以“角度方式”来做,所以你应该在你的指令中做这样的事情:

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(),不应该有效。因为必须强制进行摘要循环(例如将更多元素添加到数组中)。在这里你要改变结构,所以你需要重新编译它

答案 1 :(得分:1)

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

一般问题的答案是,如果使用角度,则不应使用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