如何在angularjs中的控制器之间共享数据

时间:2013-08-30 04:47:58

标签: angularjs

我目前正在尝试学习angularJS,并且无法在控制器之间访问数据。

我的第一个控制器从我的api中提取一系列货币并将其分配给$ scope.currencies。当我单击编辑时,应该发生的是它切换使用另一个控制器的视图。现在,在使用batarang进行调试时,$ scope.currencies确实显示了一系列货币对象:

{
    currencies: [{
        CurrencyCode: HKD
        Description: HONG KONG DOLLAR
        ExchangeRateModifier: * ExchangeRate: 1
        DecimalPlace: 2
    }, {
        CurrencyCode: USD
        Description: US DOLLAR
        ExchangeRateModifier: * ExchangeRate: 7.7
        DecimalPlace: 2
    }]
}

但是当使用angular.copy时,$scope.copiedcurrencies会导致null。

function CurrencyEditCtrl($scope, $injector, $routeParams) {
    $injector.invoke(CurrencyCtrl, this, { $scope: $scope });
    $scope.copiedcurrencies = angular.copy($scope.currencies);
    console.log($scope.copiedcurrencies);
}

1 个答案:

答案 0 :(得分:2)

在控制器之间共享数据的最常见和推荐的方法是使用服务。 Click here for Live Demo (see app.js)

var app = angular.module('myApp', []);

app.factory('myService', function() {
  var myService = {
    foo: 'bar'
  };
  return myService;
});

app.controller('myCtrl1', function(myService) {
  console.log(myService.foo);
  myService.foo = 'not bar anymore!';
});

app.controller('myCtrl2', function(myService) {
  console.log(myService.foo);
});

注意:有几种创建服务的方法。