如何通过 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')
}
您必须在 "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()
,不应该工作。因为有必要强制进行摘要循环(例如将更多元素添加到数组中)。这里改了结构,需要重新编译
我正在创建一个自定义指令,这个指令需要元素的句柄 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')
}
您必须在 "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()
,不应该工作。因为有必要强制进行摘要循环(例如将更多元素添加到数组中)。这里改了结构,需要重新编译