2

我手上有一个奇怪的案子。我input[type="number"]在我的 Angular 应用程序中使用 number-polyfill 。现在,问题在于它没有考虑到 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,但这不起作用。

还有什么办法吗?

4

1 回答 1

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);
    }
  }
  ...
}
于 2013-08-29T14:17:57.317 回答