AngularJS $ setViewValue()在$ parsers.push()中没有响应

C1p*_*her 2 angularjs angularjs-directive

我有一个指令.它需要ngModel,并且在链接中,我应该能够使用modelCtrl参数$setViewValue();$render();结合使用返回更改输入字段中的值并更新存储的值ngModel.不幸的是,当我通过modelCtrl了我的逻辑功能,我不能用$setViewValue();$render();,即使我传递modelCtrl给函数.(见小提琴:http://jsfiddle.net/GSTC5/1/)

myApp.directive('demo', function() {
    return {
        require: 'ngModel',
        restrict: 'EACM',
        link: function(scope, element, attrs, modelCtrl) {
            setAndRender(modelCtrl, "12345");
            modelCtrl.$parsers.push(function(inputValue) {
                return logic(inputValue, modelCtrl);
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

在我写的另一个指令中有一些非常相似的东西,为什么它在这里失败?

更新
我认为错误在于$setViewValue().我知道它从链接函数调用它时会响应,但是$setViewValue当从逻辑函数调用代码时会阻止代码运行.

Bob*_*ger 6

从逻辑方法调用$ setViewValue,它触发另一个$ parsers循环,创建无限递归导致 RangeError: Maximum call stack size exceeded

ngModelController.$ parsers []会影响生成的ngModelController.$ modelValue,如果你也想影响ngModelController.$ viewValue,你可以直接设置$ viewValue并调用ngModelController.$ render()允许组件更新DOM.

http://jsfiddle.net/GSTC5/4/

ngModelController.$ setViewValue()只应由DOM更改事件调用.

这应该是ngModelController.$ formatters []的工作,但遗憾的是,当$ setViewValue()启动更改时,不应用格式化程序