AngularJS - 模糊+改变?

Rog*_*son 20 javascript angularjs angularjs-directive

结合ng-changed和ng-blur的最简单方法是什么?

我发现这篇文章:如何让ng-model不立即更新?

然而,这不再适用于angluar 1.2+有没有办法实现相同的行为?

我想我必须自己存储一个旧值的副本,并将新值与模糊值进行比较,如果我尝试做同样的事情,或者有更简单的方法吗?

Nie*_*eek 46

使用ng-model options.像这样,ng-change只会在输入模糊时触发.

<input type="text" 
       ng-model="a.b" 
       ng-model-options="{updateOn: 'blur'}" 
       ng-change="onchange()"/>
Run Code Online (Sandbox Code Playgroud)


Rog*_*son 14

这就是我想要的.它将值存储在焦点上,并将其与模糊的新值进行比较,如果更改,则会触发属性中的表达式.

 app.directive('changeOnBlur', function() {
            return {
                restrict: 'A',
                require: 'ngModel',
                link: function(scope, elm, attrs, ngModelCtrl) {
                    if (attrs.type === 'radio' || attrs.type === 'checkbox') 
                        return;

                    var expressionToCall = attrs.changeOnBlur;

                    var oldValue = null;
                    elm.bind('focus',function() {
                        scope.$apply(function() {
                            oldValue = elm.val();
                            console.log(oldValue);
                        });
                    })
                    elm.bind('blur', function() {
                        scope.$apply(function() {
                            var newValue = elm.val();
                            console.log(newValue);
                            if (newValue !== oldValue){
                                scope.$eval(expressionToCall);
                            }
                                //alert('changed ' + oldValue);
                        });         
                    });
                }
            };
        });
Run Code Online (Sandbox Code Playgroud)

用法:

 <input ng-model="foo" change-on-blur="someFunc()" />
Run Code Online (Sandbox Code Playgroud)

  • `ng`前缀应保留给原生角度指令. (2认同)