您的问题的症结在于您试图将 AngularJS 与非常传统的“jQuery-soup 风格”JavaScript 模式混合使用。在 Angular 中,您应该始终使用指令来进行 DOM 操作和交互(包括点击)。在这种情况下,您的代码应类似于以下内容:
<div ng-controller="myModelCtrl">
<div>Number is {{myModel.number}}</div>
<a ng-click="myModel.updateNumber()">Update Number</a>
</div>
function myModelCtrl($scope) {
var myModel = new MyModel();
$scope.myModel = myModel;
}
function MyModel() {
var _this = this;
_this.number = 0;
_this.updateNumber = function() {
_this.number += 1;
alert('new number should display ' + _this.number);
}
return _this;
}
请注意,我们不是使用 jQuery 设置手动click
处理程序,而是使用 Angular 的内置ng-click
指令。这允许我们绑定到 Angular 范围生命周期,并在用户单击链接时正确更新视图。
这是来自AngularJS 常见问题的引用;我已经加粗了一个可以帮助你改掉这个习惯的部分。
常见的陷阱
Angular 支持频道(Freenode 上的#angularjs)发现了许多 Angular 新用户经常陷入的陷阱。本文档旨在在您发现它们之前指出它们。
DOM 操作
停止尝试使用 jQuery 修改控制器中的 DOM。真的。这包括添加元素、删除元素、检索它们的内容、显示和隐藏它们。使用内置指令,或在必要时编写自己的指令来进行 DOM 操作。有关复制功能,请参见下文。
如果您正在努力改掉这个习惯,请考虑从您的应用程序中删除 jQuery。真的。Angular 具有 $http 服务和强大的指令,几乎总是不需要它。Angular 捆绑的 jQLite 具有一些最常用于编写 Angular 指令的特性,尤其是绑定到事件。
最后,这里是你的例子,使用这种技术:http: //jsfiddle.net/BinaryMuse/xFULR/1/