我已经为此寻找解决方案,但在我的案例中似乎没有任何效果。
我在coffeescript中的两个角度控制器之间共享数据,如下所示:
angular.module('app').controller 'accountCtrl', ($scope, $state, accountFactory) ->
Api.Account.get(token: $scope.current_user.account_id).$promise.then ((response) ->
accountFactory.set(response)
$scope.account = accountFactory.account
)
angular.module('app').controller 'accountPaymentMethodsCtrl', ($scope, $state, Api, accountFactory) ->
$scope.account = accountFactory.account
$scope.displayedPaymentMethods = [].concat($scope.account.payment_methods)
我将数据存储在工厂中:
angular.module('app').factory 'accountFactory', ->
account = {
payment_methods: {}
set: (account) ->
@account = account
@account.payment_methods = account.payment_methods
}
account
这是问题所在: 当我刷新页面时,
$scope.displayedPaymentMethods = [].concat($scope.account.payment_methods)
引发
无法读取未定义
的属性'payment_methods'
因为父控制器中的$ scope.account尚未解析。我如何得到这一行
$scope.displayedPaymentMethods = [].concat($scope.account.payment_methods)
和其他在父控制器中的$ scope.account解析后运行?
答案 0 :(得分:1)
好吧,将API调用包含在函数
下面Api.Account.get(token: $scope.current_user.account_id).$promise.then ((response) ->
accountFactory.set(response)
$scope.account = accountFactory.account
)
并在accountPaymentMethodsCtrl
中调用此函数并等待承诺解决,就像您在accountCtrl
中所做的那样。
这将有效:)
干杯!
答案 1 :(得分:0)
使用'本地存储'存储您的帐户信息。或者' cookie'并检索数据
答案 2 :(得分:0)
如果父控制器和子控制器在不同的路由上,那么您可以使用路由解析来使子控制器等待。 https://johnpapa.net/route-resolve-and-controller-activate-in-angularjs/
如果不是,那么我建议写一个工厂来存储数据并在两个控制器中使用它。