我正在创建一个自定义指令,这个指令需要处理ngModelOptions
元素,也许我可以用jQuery
选择器来改变元素html,但我想知道我是否可以做这可以通过javascript
获得更好的一致性
因为我需要为表单中的所有输入设置ngModelOptions="{updateOn:'blur'}
所以我想创建一个指令来执行此操作,可能是<input type='text' updateBlur/>
我想知道是否可以使用代码设置此选项,可能是
myElement.attrs.ngModelOptions.updateOn = "blur default";
答案 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')
}