Angular JS:在ng-change上获取ng-model
Angular JS: get ng-model on ng-change
我有以下HTML
<select ng-model="country" ng-options="c.name for c in countries" ng-change="filterByCountry"></select>
由以下对象提供,其中包含国家列表
$scope.countries = [{name:Afeganistão, country:AF}, {name:África do Sul, country:ZA}, name:Albânia, country:AL}, {name:Alemanha, country:DE}, {name:Andorra, country:AD} ...];
当我改变我的下拉值,我期待我的模型($scope.country)被更新,内部filterByCountry函数,但它不是。我遗漏了什么?
在实际更新ng-model
之前触发ng-change
处理程序。如果您希望每次$scope.country
更改时都触发filterByCountry
(而不仅仅是当下拉菜单更改时),您应该使用以下命令:
$scope.$watch('country', filterByCountry);
我总是发现在可能的情况下,对$scope
的变化作出反应比对DOM事件作出反应更有用。
给在座的各位,在模型值设置后,ng-change
实际上被称为。
为什么?
让我们看看它什么时候被调用。从angular源代码来看,ng-change
只是一个带有该指令定义对象(DDO)的属性指令。
{
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attr, ctrl) {
ctrl.$viewChangeListeners.push(function() {
scope.$eval(attr.ngChange);
});
}
}
由此可见,ng-change
指令非常简单。ng-change='<expr>'
所做的只是在$viewChangeListeners
的末尾添加一个函数,通过$scope.$eval.
<expr>
的值。好吧…什么时候调用viewchangelistener ?
好吧,如果我们看看ngModel的文档。NgModelController:
新值将应用于$modelValue,然后是ng-model属性中指定的表达式。最后,在$ viewchangelistener列表中,所有注册的更改侦听器都被调用。
因此,ngChange的viewChangeListener将在值应用于$modelValue
之后被调用。因此,回调将在模型设置后被调用。
还要注意,这个行为在所有版本的angular中都是一样的。ng-change
的定义自v1.2以来没有改变。
正如James Lawson指出的,
ng-change实际上是在模型值设置后调用的。
如果你还在问
那么你应该知道$scope是原型继承自它的父变量,如果你的作用域变量只是一个简单的类型(字符串,布尔等),那么它将在子作用域中被覆盖为由ng-model指令 设置的值。要查看子作用域是在哪里创建的(在哪个DOM元素上),您可以打开开发工具并在元素为什么我看到了相反的行为?
class="ng-scope"
。
- 从 Javascript 中设置 ng-model name
- Toggle Switch在包含ng model和ng repeat之后不进行切换
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- 当与之关联的 ng-model 为 false 时,Angularjs 复选框值不会取消选中
- 获取ng以外的重复角度值
- 如何获取 ng-repeat 输入 angularjs 的值
- ng-model 绑定到选择标签生成的空默认值
- 对象不能在angularjs ng-model中访问
- 为什么 HTML 中的 Value 属性在与 AngularJS 中的 ng-model 一起使用时不起作用
- 当输入ng-model是ngRepeat变量时,如何从输入数据中获取
- NG-model 未定义多种方式无法从文本框获取文本
- AngularJs 指令在更改时获取单选按钮 ng-model 值
- 使用getterSetter从ng-model中获取无限摘要循环
- AngularJS -无法从ng-model获取值到控制器
- Angular的ng-click无法获取ng-model的值
- 通过ng-repeat, ng-model和复选框获取数组中的位置
- 从控制器获取未定义的ng-model
- 从模板中获取ng-model值
- 如何将计算出的ng-model值获取到另一个ng-model中
- Angular JS:在ng-change上获取ng-model