根据AngularJS中$apply或$digest循环的指令更新模型
Update model from directive from $apply or $digest cycle in AngularJS
我尝试从指令更新模型,但在$apply或$digest已经在进行时遇到了一些问题。我有一些问题:
- 为什么
scope[attrs.ngModel]
存在,而ngModel.$modelValue
不存在是否存在于$apply阶段 - 为什么视图不能总是在$digest阶段更新(尤其是在困难的情况下)
- 是$digest阶段的本地$digest()或$root$digest()(来自$appley())
require: '?ngModel',
link: function(scope, element, attrs, ngModel) {
element.bind('myEvent', function(e) {
//Update model from directive in phase: $apply | $digest
scope[attrs.ngModel].value = scope.$$phase; //Model: '$apply' | '$digest'
//or
ngModel.$modelValue.value = scope.$$phase; //Model: 'none' | '$digest'
//or
ngModel.$modelValue.value = scope.$$phase; //Model: '' | '$digest'
ngModel.$setViewValue(ngModel.$modelValue);
});
}
现场演示:http://plnkr.co/edit/gVY6GJejEKCLdTIXNAzK?p=preview
-
这是因为angular不知道如何将模型映射到DIV元素。angular几乎为任何INPUT(INPUT类型文件除外)、SELECT和TEXTAREA元素都内置了模型实现。在您的情况下(应用ng模型的DIV),没有已知的angular匹配模型适配器。DIV元素的哪个属性/属性应该采用angular才能与您的模型同步??这就是为什么没有应用$modelValue。您要做的是为angular提供一个自定义模型适配器,或者您需要使用INPUT、SELECT或TEXTAREA元素。
-
因为在$digest phase angular中,假设所有更改都已完成。
-
不存在本地或全局$digest阶段。阶段总是与你的ng应用程序相关联。
相关文章:
- 对父作用域的指令更新延迟了一步
- 我无法通过angularjs中的指令更新变量
- AngularJs 指令更新
- 如何在事件上对jquery上的ng模型进行指令更新
- 可以从控制器更新工厂,但不能从指令更新
- Angular指令更新多个元素的高度以匹配最高的
- Angular.js-从指令更新父作用域
- Angularjs 指令更新到 DOM 属性值的变化
- 从使用它的指令更新服务
- 推送到数组不会通过ng repeat指令更新视图列表
- AngularJS-通过服务从指令更新控制器数据(this.model语法)
- 如何让AngularJS指令更新由另一个指令生成的锚点
- 如何使用选择列表从指令更新父级上的模型
- 根据AngularJS中$apply或$digest循环的指令更新模型
- 从指令更新作用域,并使用另一个指令进行监视
- 通过指令更新作用域.最佳实践
- AngularJS后台任务指令更新控制器
- Angular指令更新父控制器对象
- 美元范围.父母.messageContent=值没有从指令更新父作用域
- AngularJS:通过指令更新模板绑定