$ scope。当未定义ng-model时,不会触发$ watch?

时间:2017-06-03 15:25:01

标签: javascript angularjs

问题:

我尝试使用$scope.$watch方法对数字输入中使用的ng模型使用严格的属性,例如maxminmaxlength和{{1 }}

当输入中插入的值超过任何属性时,ng-model将检索step

因此,最终会发生什么:每当我们更改输入中的值时,都会触发undefined。一旦值未定义,只有当插入的值再次有效时才会再次触发,换句话说,遵循属性规则(max,min,maxlength和step)。

E.g。

用户输入: -2,4 - >系统会触发$scope.$watch,并将$scope.$watch输出为newValue

用户添加了一个新数字: -2,44 - &GT; <{1}}不会再以这种方式触发。

main.js

undefined

**的index.html

$scope.$watch

问题:即使在未定义的$scope.$watch("user.input.base.sphere", function(newValue, oldValue) { console.log(newValue); }

上,我仍然可以触发<input ng-cloak type="number" ng-class="user.settings.input.sphere.class" autocomplete="off" required name="sphere" id="in-sphere" title="Sphere" step="{{user.filter.sphere.step}}" min="{{user.filter.sphere.min}}" max="{{user.filter.sphere.max}}" maxlength="{{user.filter.sphere.maxlength}}" placeholder="{{user.filter.sphere.placeholder}}" ng-model="user.input.base.sphere" select-on-click sphere>

1 个答案:

答案 0 :(得分:1)

您可以将以下函数附加到ng-keyup指令。此函数将获取对表单控件的引用,并读取用户键入的值,即使模型中的值尚未更新。

$scope.changeHandler = function (a) {
  var element = angular.element(document.querySelector('#in-sphere'))[0];
  console.log(element.value);
}

使用以下方法将其附加到您的表单控件: ng-keyup='changeHandler()'

Here is a working plunker