单击按钮时更新角度视图模型
Updating Angular view model on button click
我试图了解 Angular 数据绑定的工作原理。 我创建了此示例,该示例在span
元素中显示{{values.count}}
:
<body ng-app="testApp" ng-controller="testCtrl as values">
<span>Count = {{values.count}}</span>
<button id="incr">++</button>
</body>
<script>
testApp = angular.module("testApp", []);
testApp.controller("testCtrl", function () {
var values = this;
values.count = 5;
$("#incr").on('click', function () {
values.count += 1;
});
});
</script>
如果我单击该按钮,values.count
会递增,但span
不会更新。 如果我在按钮上放置一个ng-click="values.Increment()"
并在控制器中创建values.Increment
方法,我可以让它工作,但是使一个工作和另一个不起作用有什么区别?
你做错了。使用 angular 时,您不需要为此目的绑定事件处理程序/访问 DOM 元素。使用内置的ng-click
指令。
<button ng-click="values.incr()">++</button>
和
values.incr = function(){
values.count++;
}
您甚至可以内联执行此操作,<button ng-click="values.count = values.count+1">++</button>
你的代码没有更新 DOM 的原因是因为角度的工作方式。即使您正在递增手动绑定事件处理程序中的值,角度也不知道更新,并且它不会使用新值更新 DOM 绑定。虽然在您的特定情况下是一种不好的做法,但您可以通过执行$scope.$apply()
(但当然您需要在控制器中注入$scope
)以及在事件处理程序中手动调用摘要循环来实现这一点。使用 angular 时的一般经验法则是控制器不直接访问 DOM,相反,它只是为视图设置数据,并在绑定和其他内置或自定义指令的帮助下,您可以在应用程序中获得预期的行为。
阅读有关范围生命周期和摘要周期的信息
相关文章:
- 如何在视图模型contet更新更新上调用Jquery函数
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 在MVVM视图模型中处理应用程序范围的元素
- 将c#视图模型转换为javascript模型时转义HTML标记
- 使用knockout.js将数组绑定到视图模型
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 聚合物:在不同的视图模型中多次使用元素
- 使用AMD时未定义淘汰组件视图模型
- 如何在Knockout.js中选中复选框时更新视图模型及其依赖项
- 无法将对象列表从视图模型设置为 javascript 变量
- 挖空视图模型函数仅影响最后一个实例
- 挖空.js嵌套视图模型不起作用
- 为什么我的视图模型不起作用
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 挖空.js:等待视图模型实例化完成
- 在Knockout视图模型中调用jQuery插件是一种有效的模式
- KnockoutJS:如何避免在applyBindings上运行视图模型函数
- 使用knockoutjs操作视图模型
- Kendo UI自定义验证不适用于模板和视图模型