AngularJS:在$watch函数中修改模型
AngularJS : changing a model in a $watch function
我有一个这样的指令:
.directive('checkMeIfApplyAll', function($timeout) {
return {
link: function(scope, element, attrs) {
scope.$watch(attrs.checkMeIfApplyAll, function(value) {
debugger;
if(value === true) {
element.prop('checked', true);
}
else {
element.prop('checked', false);
}
});
}
};
下面是相应的html片段:
<tr 'ng-repeat'='permission in category.permissions'>
<input type='checkbox' 'ng-model'='permission.show' 'check-me-if-apply-all'= 'category.allChecked'>
</tr>
注意,如果category的值。allChecked变化,则触发监视功能。如您所见,如果该值为真,那么使用jquery,我就可以选中复选框。然而,正如你在html片段中看到的,每个复选框都被分配了一个模型,例如:"permission.show"。我真正想做的是改变指令中的model值,而不仅仅是元素的属性。如何访问watch函数内部元素的ng-model属性?
你可以使用ngModelController:
.directive('checkMeIfApplyAll', function($timeout) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
scope.$watch(attrs.checkMeIfApplyAll, function(value) {
debugger;
if(value === true) {
element.prop('checked', true);
}
else {
element.prop('checked', false);
}
// Set value like this
ngModel.$setViewValue(value);
});
}
};
让我们简单点。我认为你不需要指令,$watch不应该被过度使用。
<tr ng-repeat='permission in category.permissions'>
<input type='checkbox' ng-model='permission.show'
ng-checked='category.allChecked'>
</tr>
要访问指令中的模型,只需访问scope.category.permissions[INDEX].show
由于没有提供plnkr,所以我没有测试上面的
相关文章:
- 如何在Angular端到端测试中修改阵列模型
- 在 Backbone 中侦听和修改模型属性的正确方法是什么.js
- AngularJS:在不修改ng模型的情况下获取选择标签
- 从视图中修改ng模型
- Django 从 HTML 修改模型实例
- 煎茶触摸 2 商店 - 在创建模型之前修改响应
- 用于修改从子视图模型在父视图上可观察到的删除的模式
- ExtJS检查列在修改模型后无法编辑
- 在使用Backbone.history时如何处理修改过的模型
- EmberJS -在渲染前修改模型并在更新时重置
- Backbone.js一个模型被多个视图修改
- BackboneJS:从不同的视图修改单个模型
- AngularJS:在$watch函数中修改模型
- 在Angular指令中修改ng-repeat模型
- 如何用模型驱动/响应式表单修改指令中的输入值
- AngularJS$格式化程序和$parsers使用输入[数字]箭头错误地修改了模型
- 修改 Django 表单.模板中的文本区域或始终在模型中
- 在指令中修改模型
- 在 ember.js 中显示到页面之前修改模型上的属性
- 如何避免在angular.js修改模型的指令中污染作用域