AngularJS多控制器程序流程

时间:2015-04-15 07:13:22

标签: angularjs

我对AgularJS不太好我可能在这里缺少简单的基础知识。我在同一页面上有2个控制器实际3个,让我们只讨论另一个2.我的问题是;程序运行第2个控制器第1,而我希望它首先运行第1个控制器,因为第2个控制器依赖于第1个控制器上提供的customerId。

Controller1(with) - >服务A

Controller2(with) - >服务B(并依赖于) - >服务A

On Service A我在Controller1中有一个变量customerId和data-ng-init,分配customerId。然后,Controller2 data-ng-init获取客户订单,因此需要customerId。现在,controller2无法获得订单,因为customerId为空。当我调试代码时,我发现Controller2首先运行,然后运行Controller1。

我不确定这是否与任何事情有关,但是,在HTML页面上,Controller1首先显示,甚至我的脚本调用Controller1是第一个调用的。我甚至试图将Controller2放在Controller1的HTML上,但没有区别。

<div data-ng-controller="customerController" data-ng-init="getCustomer()">
</div>
<div data-ng-controller="cusomerOrdersController" data-ng-init="getCustomerOrders()">
</div>

谢谢

1 个答案:

答案 0 :(得分:1)

看起来您需要使用$broadcast事件来调用从ng-init指令调用的方法,因为当html按角度编译时会调用ng-init指令,&amp;没有customerId可用,因为它是使用ajax调用设置的。

基本上你需要在获得customerId之后广播事件,然后听取该事件并调用所需的函数,而不是从ng-init

调用它

控制器A (获取customerId后在此处广播)

$rootScope.$broadcast('EventBroadCasted', $scope.customerId)

控制器B (在此收听广播事件)

$scope.$on('EventBroadCasted', function(event, data){
   //data parameter will contain customerId you can pass it to method
   $scope.getCustomerOrders(customerId); //call method here
});