Angularjs跨控制器共享数据

时间:2015-11-19 05:48:52

标签: javascript angularjs

我使用服务来共享数据交叉控制器,它的工作原理。 第一页使用名为ACtrl的控制器:

<a ng-click='doit()'>click me</a>

第二页使用不同的控制器BCtrl

 <label>{{person.name}}</label>

doit函数中,我使用服务共享了一个对象。在BCtrl我得到共享对象,一切都很好。 但是我希望第二页打开另一个窗口,所以我改变了第一页如下:

<a ng-click='doit()' href='_blank'>click me</a>

然后第二页不起作用。 那么如何解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

您可以通过事件发送数据,例如

ACtrl

data = {a: 1, b: 2}
$rootScope.$broadcast('dataChanged', data);

BCtrl

$scope.$on('dataChanged', function(e, data) {
    console.log(data);
}

答案 1 :(得分:0)

首先在service.js

中定义工厂服务
.factory('DataScopeService', function($rootScope) {
     var mem = {};

     return {
         set: function(key, value) {
             mem[key] = value;
         },
         get: function(key) {
             return mem[key];
         }
     };
 })

然后,使用此服务从项目中的任何控制器设置和获取数据。

ControllerA

DataScopeService.set("selectedTimePeriod", '1');

ControllerB

$scope.selectedTime = DataScopeService.get("selectedTimePeriod")