我尝试在不修改HTML的情况下模拟指令中的ng-change属性(因此没有ng-change属性)。
查看ngChange
指令的角度源代码,我的指令工作原理如下:
(基本上在此指令中,blur()
select
时我需要model
change
字段
.directive('blurOnChangeFix', ['$timeout',
function($timeout) {
return {
restrict: 'AEC',
require: 'ngModel',
link: function($scope, element, attr, ngModel) {
// automatically blur element on ngModel change
ngModel.$viewChangeListeners.push(function() {
$timeout(function() { // IE bug fix
$(element).blur();
}, 100);
});
}
};
}
]);
将其应用于:
<select
id="test"
ng-options="option for option in ['test1', 'test2'] track by option"
class="form-control"
ng-model="form.test"
ng-required="true"
blur-on-change-fix
></select>
但这是正确的解决方案吗?还有其他办法吗?那么scope.change()呢?
由于
答案 0 :(得分:2)
如果我理解正确,您正在寻找在您的模型上执行$watch
;例如:
link: function($scope, element, attr, ngModel) {
$scope.$watch(attr.ngModel,function(newVal,oldVal) {
element.blur();
})
您声明在model
更改时您想要执行某些操作,因此这是$ watch的使用。