javascript - 单击按钮更新 Angular View 模型

标签 javascript angularjs

我正在尝试了解 Angular 数据绑定(bind)的工作原理。我创建了这个在 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()" 并在 Controller 中创建一个 values.Increment 方法,我可以让它工作,但是一个有效而另一个无效的区别是什么?

最佳答案

你做错了。使用 Angular 时,您不需要为此目的绑定(bind)事件处理程序/访问 DOM 元素。使用内置 ng-click指令。

<button ng-click="values.incr()">++</button>

values.incr = function(){
  values.count++;
}

你甚至可以内联,<button ng-click="values.count = values.count+1">++</button> 您的代码未更新 DOM 的原因是 Angular 工作方式。即使您在手动绑定(bind)的事件处理程序中递增值,angular 也不知道更新并且它不会使用新值更新 DOM 绑定(bind)。尽管在您的特定情况下是一种不好的做法,但您可以通过执行 $scope.$apply() 来实现。 (但当然你需要在你的 Controller 中注入(inject) $scope)以及在事件处理程序中手动调用摘要循环。使用 Angular 时的一般经验法则是 Controller 不直接访问 DOM,相反,它只是为 View 设置数据,并借助绑定(bind)和其他内置或自定义指令,您可以在应用程序中获得预期的行为。

Read about scope life cycle and digest cycle

关于javascript - 单击按钮更新 Angular View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28017704/

相关文章:

javascript - 在浏览器上无法访问服务 Angular 应用程序

javascript - SVG位移贴图过滤器

java - 需要通过网页获取路径位置

javascript - 将变量传递给函数(作用域问题)

javascript - AngularJS 找不到模板

javascript - 如何使用 Angularjs $http 发布状态错误

javascript - 将数据直接加载到选择框angularjs

node.js - nodejs hapi 单页

javascript - 因此 Origin 'http://localhost:3000' 不允许访问 Twitter API

javascript - 我可以使用 javascript 强制浏览器 "flush"任何未决的布局更改吗?