$ rootScope未在SPA中更新

时间:2017-03-13 00:58:36

标签: angularjs angularjs-scope angular-ui-router

我的第一个控制者:

angular.module('application')
.controller('FirstController',['$rootScope',function($rootScope) {  
            var data=[0,1,2];
            $rootScope.items=data;           
   }]);

我的第二个控制员:

angular.module('application')
    .controller('SecondController',['$rootScope',function($rootScope) {                      
                $rootScope.items[0]=3;
                console.log($rootScope.items);  // [3,1,2]               
       }]);

当第二个控制器运行时,其相应的视图被改变;但是回到第一个控制器的相应视图时会发生同样的情况(两个视图都绑定到$rootScope.items)。 为什么会这样?我正在使用ui-router,FirstController与SPA的主页面和SecondController与另一个页面有关。此外,通过跟踪$ rootScope.items:

<pre>
  {{$root.items | json}}
</pre>

在两个模板中,第二个更新为[3,1,2],第一个仍为[0,1,2]。

1 个答案:

答案 0 :(得分:0)

在两个控制器之间传递相同的$ scope并不是维护单个数据模型的理想方式,您需要做的是建立一个服务模块(或工厂)来为您管理数据,这样两个控制器都可以与您的数据因素进行对话。

这是您设置工厂的方式

app.factory("Data", 
   function () {
       var storage = [0,1,2]; // where your data is 
       return {
          get: function () {
            return storage; 
          },
          set: function (toSet) {
            storage = toSet;
            return storage;
          }
      };
});

让控制器知道数据的位置,使用

app.controller ("FirstController",
function ($scope, Data)
{
   console.log(Data); // [0,1,2]
   Data.set( [3,1,2]); // demoing change
}

同样适用于第二个控制器

app.controller ("FirstController",
function ($scope, Data)
{
   console.log(Data); // [3,1,2]
}