Angularjs:在外部角度模型更改时将表单设置为脏

时间:2013-08-29 13:33:46

标签: javascript angularjs polyfills

我的手上有一个特殊的情况。我在我的Angular应用程序中使用了数字 - polyfill input[type="number"]。现在,问题在于它并没有考虑到Angularjs处理事物的方式。

同样,如果我以编程方式递增/递减输入值,则与输入关联的ngModel不会获得更新的值。

我已经通过编写自定义指令并将模型传递到pollyfill

来解决这个问题
angular.module('appModule').
  directive('type', ['$parse', '$timeout', function($parse, $timeout) {
    restrict: 'A',
    require: '?ngModel',
    link: function($scope, iElement, iAttrs, ngModel) {
      ...
      if iAttrs.type is 'number'
        iElement.inputNumber(ngModel)  // <-- THIS LINE
      ...
    }
  }

在polyfill代码中,我修改了这个:

increment = function(elem) {
  ...
  if (model != null) {
    model.$setViewValue(newVal);
  }
  ...
}

完美无缺。现在,问题是即使在更新模型的值之后,关联的表单也不会变脏。在我的代码中,不可能将表单作为参数传递给此polyfill。

我尝试使用model.$dirty = true,但这不起作用。

还有其他方式吗?

1 个答案:

答案 0 :(得分:0)

我弄明白了这个错误。虽然$setViewValue应该将我的表单设置为脏,但是阻止它的事实是我执行此操作的代码是out-of-$scope;)

而且,为此$scope.$apply()派上用场。所以,现在与模型一起,我也将$ scope传递给polyfill。

angular.module('appModule').
  directive('type', ['$parse', '$timeout', function($parse, $timeout) {
    restrict: 'A',
    require: '?ngModel',
    link: function($scope, iElement, iAttrs, ngModel) {
      ...
      if iAttrs.type is 'number'
        iElement.inputNumber(ngModel, $scope)  // <-- THIS LINE
      ...
    }
  }

increment = function(elem) {
  ...
  if (model != null) {
    $scope.$apply(function() {
      model.$setViewValue(newVal);
    }
  }
  ...
}