Angular以编程方式添加没有属性的ngChange

时间:2014-04-18 07:49:34

标签: javascript angularjs angularjs-directive angular-ngmodel angularjs-ng-change

我尝试在不修改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()呢?

由于

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您正在寻找在您的模型上执行$watch;例如:

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

您声明在model更改时您想要执行某些操作,因此这是$ watch的使用。