为什么$ scope中的变量不会更新?

时间:2014-10-05 13:46:07

标签: javascript angularjs angularjs-scope

plunker中的代码。 我有两个控制器。在第一个控制器中,我在视图中有按钮处理程序

 $scope.click = function () {
  $location.url("/some");
  console.log("clicked");
}

在处理程序中我更改URL。我还配置了我的$ routeProvider。

var app = angular.module('plunker', []).config( function ($routeProvider) {
  $routeProvider.when('/some', {template: " counter is {{n}}</br> <button ng-click='click()'>click to load new url but  still with \"loading cntl\"</button>", controller: "loading"})
  .when("/second",{controller: "loading"});
}); 

这里我有两个不同的路由,它们具有相同的控制器 - loading控制器 因此,在我的网址更改为/some后,我的视图中会显示新按钮。我在loading控制器中有这个按钮的另一个处理程序。

app.controller("loading", function ($scope,$location) {
 $scope.n= $scope.n || 0;
 console.log("at the begining n is "+ $scope.n);
 $scope.click = function click() {
 $scope.n++;
 console.log("n after++ is " + $scope.n);
 $location.url("/second");

}

}); 在这里,我增加n变量并将网址更改为/second。在我的$routeProvider中,我指出带有此网址的路线也必须包含loading controller。触发按钮后它会消失,因为/second路由器没有模板。我再次按下主视图上的按钮,我的loading controller再次执行,但n变量仍为0.为什么n的值不是1? 我知道我的解释令人困惑,但我有plunker

中的代码

1 个答案:

答案 0 :(得分:1)

您正在实例化一个具有新范围的新控制器(因此是一个新变量n)。您需要将迭代数据保持在更持久的状态,例如父作用域,服务,localStorage等(取决于您需要的数据)。

以下是使用$rootScope的工作示例,您可以看到(您应该在最终代码中使用$ rootScope以外的其他内容):http://plnkr.co/edit/HETROBPwa6VyjX83Eev0?p=preview

我在控制器中添加了一个简单的console.log('scope', $scope);,因此您可以看到每次更改网址时都会创建一个新范围。