1

我正在尝试在不修改 HTML 的情况下模拟指令中的 ng-change 属性(因此没有 ng-change 属性)。

查看指令的角度源代码ngChange,我的指令工作并且看起来像这样:(基本上在这个指令中,我需要blur()一个select字段 when 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() 呢?

谢谢

4

1 回答 1

2

如果我对您的理解正确,您正在寻找$watch在您的模型上做一个;例如:

link: function($scope, element, attr, ngModel) {
    $scope.$watch(attr.ngModel,function(newVal,oldVal) {
        element.blur();
    })

你说你想在改变的时候做点什么model,所以这就是 $watch 的用法。

于 2014-04-24T22:16:40.163 回答