简体   繁体   English

AngularJS在控制器之间共享数据

[英]Angularjs share data across controllers

I use service to share data cross controllers and it works. 我使用服务来共享跨控制器的数据,并且可以正常工作。 First page use a controller named ACtrl : 第一页使用名为ACtrl的控制器:

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

Second page use a different controller BCtrl : 第二页使用另一个控制器BCtrl

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

In doit function, I shared an object using service. doit函数中,我使用服务共享了一个对象。 In BCtrl I get the share object ,all is fine. 在BCtrl中,我得到了共享对象,一切都很好。 But I want the second page open an another window, so I change first page as below: 但是我想第二页打开另一个窗口,所以我将第一页更改如下:

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

Then second page doesn't work. 然后第二页不起作用。 So how to resolve this problem? 那么如何解决这个问题呢?

You can send data through events, like 您可以通过事件发送数据,例如

ACtrl 快捷键

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

BCtrl BCtrl

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

Firstly define a factory service in your service.js 首先在service.js中定义工厂服务

.factory('DataScopeService', function($rootScope) {
     var mem = {};

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

Then, use this service to set and get data from any controller in your project. 然后,使用此服务来设置和从项目中的任何控制器获取数据。

ControllerA 控制器A

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

ControllerB 控制器B

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM