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

标签 javascript angularjs angularjs-scope

plunker中的代码。 我有两个 Controller 。在第一个 Controller 中,我的 View 中有按钮处理程序

 $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"});
}); 

这里我有两条不同的路线,它们具有相同的 Controller - loading Controller 因此,在我的 URL 更改为 /some 后,我的 View 中会出现新按钮。我在加载 Controller 中有另一个处理程序。

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 变量并将 URL 更改为 /second。在我的 $routeProvider 中,我指出具有此 URL 的路由也必须具有加载 Controller 。触发按钮后,它会消失,因为 /second 路由器没有模板。我再次按下主视图上的按钮,我的loadingcontroller再次执行,但n变量仍然是0。为什么n的值不是 1 吗? 我知道我的解释很困惑,但我的代码在 plunker

最佳答案

您正在实例化一个具有新作用域的新 Controller (因此是一个新变量n)。您需要将迭代数据保存在更持久的东西中,例如父作用域、服务、本地存储等(取决于您需要数据的目的)。

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

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

关于javascript - 为什么 $scope 中的变量不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26203146/

相关文章:

javascript - 如何访问数组中的数组元素(JavaScript)?

javascript - AngularJS ng-repeat不显示数据

javascript - Angularjs 在 ng-click 函数中访问此元素

javascript - ng-model 未在嵌套指令中更新

javascript - 在模板中使用方法时,Angular 中的两种方式数据绑定(bind)

angularjs - 更改 $scope.$on 函数中的 $scope.variable 不会更新 View

c# - 通过javascript在asp.net文本框控件中设置css类

php - 实时 Ajax 搜索不打印所有结果

javascript - 更改 Three.js 对象的几何形状

unit-testing - 包含routeChangeSuccess的AngularJS测试 Controller