1

HTMLを変更せずに(つまり、ng-changeプロパティなしで)ディレクティブでng-change属性をシミュレートしようとしています。

ディレクティブのAngularソースコードを見ると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() はどうですか?

ありがとう

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 に答える