AngularJS - $scope 没有绑定到 DOM

AngularJS - $scope does not bind to DOM

我是 Angular 的新手,作为练习,我正在构建一个小型网站。在其中一个页面上,我希望能够显示已通过数据绑定单击的按钮数。为此,我有这个控制器

'use strict';

angular.module('angularApp')
    .controller('MyCtrl', function ($scope) {
    var timer = 0;

    $scope.clicked = function () {
        timer++;
        console.log(timer);
        return timer;
    };

    $scope.actualTime = $scope.clicked(timer);
});

关于观点,我有:

<button type="submit" ng-click="clicked()" class="btn btn-success">Start</button>
    <p>You clicked {{actualTime}} minutes ago.</p>

控制器通过 $routeProvider 绑定到视图。

理想情况下,每当我点击按钮时,{{actualTime}} 值应该递增。但它不是出于某种原因。据我所知,它应该是绑定的(就像在双向数据绑定中一样),所以不应该有一个函数来更新 DOM。 console.log 以正确的增量更新,但 DOM 没有。有人想解释一下这是如何工作的吗?我在这里读过答案,大多数(如果不是全部)听起来都太技术性了。一个简单的解释会很有帮助。谢谢!

在您的代码中,您不会在每次点击时更新变量 'actualTime'。

您可以通过两种方式更新变量

1) 您可以在调用的函数中为每次点击更新它

http://plnkr.co/edit/o8Jq5jQn0DEg0mN2r7Zd

HTML

<button type="submit" ng-click="clicked()" class="btn btn-success">
Click      
</button>
<p>You clicked {{actualTime}} minutes ago.</p>

JS

var timer=0;
$scope.actualTime = 0;
$scope.clicked = function () {
    timer++;
    $scope.actualTime = timer;
};

2) 您也可以使用“$watch”更新它。

HTML

<p>Using $watch service  : You clicked {{actualTime2}} minutes ago.</p>

JS

如果您定义了变量“$scope.actualTime”,那么每当变量“$scope.actualTime”发生变化时,将其新值赋给“$scope.actualTime2”

$scope.$watch('actualTime',function(newval, oldval){
  $scope.actualTime2 = newval;
})