我对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>
谢谢
答案 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
});