我的手上有一个特殊的情况。我在我的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
,但这不起作用。
还有其他方式吗?
答案 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);
}
}
...
}