angulars,directive,force ngModelCtrl。$ parsers

时间:2016-07-14 06:31:17

标签: angularjs angularjs-directive angularjs-ng-model

我有一个自定义指令,根据他的值更改视图值添加类到input:text

restrict: 'A',
require : 'ngModel',
link : function(scope, element, attrs, modelCtrl) {
  function apply(input) {
    // Simplified ..
    if ( input!=='Ooops' && isNaN(parseFloat(input) ) {
      modelCtrl.$setViewValue('Ooops'); 
      element.addClass('is-nan');
      return undefined;
    }
  }

  modelCtrl.$parsers.push(apply);
}

编辑值时,它可以正常工作。但是,当元素由Angular绑定时,我想应用相同的逻辑,以便设置类和视图值。

基本上我想在指令链接时调用apply。所以我尝试在apply(element.val())函数的末尾添加link,但element.val()始终为空。

我认为我应该使用另一个生命周期钩子来调用此方法但无法找到它。一个可能的解决方案是使用compile而不是link,但由于我不进行DOM转换,因此不需要这样做。

我已尝试过modelCtrl.$observe('ngModel', ..)但是再次输入值为空。

如何在链接指令时应用视图逻辑?

由于

1 个答案:

答案 0 :(得分:0)

使用$ observe可以正常工作。

attrs.$observe('ngModel', function(value){
  apply(modelCtrl.$modelValue);
});

(我的apply函数错误,并为所有值返回'undefined'。)