在执行服务之后延迟控制器初始化
delay controller initialization after service is executed
我在同一视图中有两个控制器
-父控制器:ServiceController(在application.js->&routeProvider中定义)
-子控制器:LanguageController(在视图中定义->ng控制器)
我想将ServiceController中的rest异步方法($resource.query())检索到的值传递给LanguageController
如何使视图等待查询完成?
非常感谢
ServiceController
ServiceController.controller('ServiceController', ['$scope' , '$routeParams', 'datas', 'GetService',
function ServiceController($scope, $routeParams, datas , GetService) {
$scope.serviceId = $routeParams.serviceId;
$scope.serviceName = $routeParams.serviceName ;
var paramsService = {
serviceId : $scope.serviceId,
serviceName : $scope.serviceName
};
GetService.query(paramsService , function(serviceDetails) {
$scope.serviceDetails = serviceDetails ;
datas.setArrayData(serviceDetails); //service which allow to send datas to LanguageController
});
}]);
语言控制器
LanguageController.controller('LanguageController', function ServiceByLanguageController(
$scope, $http, $routeParams, datas) {
$scope.listLanguage = datas.getDatas(); // empty because of the asynchronous method
});
通过$broadcast/$emit和上的$可以很容易地在控制器之间传递数据
$broadcast-通过子作用域向下传递事件/数据
$emit-通过父作用域向上传递事件/数据
$on-当事件被捕获时做点什么
你修改后的代码,应该会像你想要的一样工作
ServiceController.controller('ServiceController', ['$scope', '$rootScope', '$routeParams', 'datas', 'GetService',
function ServiceController($scope, $rootScope, $routeParams, datas , GetService) {
$scope.serviceId = $routeParams.serviceId;
$scope.serviceName = $routeParams.serviceName ;
var paramsService = {
serviceId : $scope.serviceId,
serviceName : $scope.serviceName
};
GetService.query(paramsService , function(serviceDetails) {
$scope.serviceDetails = serviceDetails ;
datas.setArrayData(serviceDetails); //service which allow to send datas to LanguageController
// broadcast from rootScope that the data has been set
// explanation: $rootScope.$broadcast('eventNameYouWantToGive', dataYouWantToPassIfAny);
$rootScope.$broadcast('dataSetInServiceContoller'); // just launch event saying data is set, no data passed
});
}]);
LanguageController.controller('LanguageController', function ServiceByLanguageController($scope, $http, $routeParams, datas) {
// $scope.$on('eventNameYouWantToCatch', function(event, dataYouWantToCatchIfAny){})
$scope.$on('dataSetInServiceContoller', function(event, anyDataPassed){
console.log('optionalDataPassed', anyDataPassed);
$scope.listLanguage = datas.getDatas(); // this should no longer be empty
});
});
这也可以通过HTML和JS来完成,因为一个控制器是另一个控制器的子控制器,语言控制器将看到服务控制器看到的所有数据,所以您实际上不需要广播(这对同一页面上的控制器很有用,这些控制器不是分层的,而是相邻的)
<div ng-controller="ServiceController">
<div ng-if="serviceDetails" ng-controller="LanguageController"> <!-- Initialize when serviceDetails of $scope is defined -->
<!-- -->
</div>
</div>
这样,当在服务控制器中定义$scope.serviceDetails
时,HTML将初始化语言控制器。
相关文章:
- 尝试初始化()Spine's控制器和故障
- Angular.js延迟控制器初始化
- Angular JS控制器初始化错误
- 在路线转换后重新初始化物料控制器
- 通过因果报应测试管理angularjs控制器初始化
- 每次属性更改时,角度控制器都会初始化
- 角度测试:监视在控制器初始化时执行的函数
- AngularJS在初始化仪表板控制器之前使用$htttp获取仪表板设置
- 列表在控制器中初始化
- 更改包含的页面和URL,而无需在AngularJS中重新初始化控制器
- Angularjs 控制器初始化
- 如何模拟在控制器初始化时运行的函数
- 在执行服务之后延迟控制器初始化
- AngularJS$在控制器初始化期间观察奇怪的行为
- Jasmine angularjs——监视控制器初始化时调用的方法
- 为什么在angular的控制器初始化期间form object不可用?
- 改变控制器初始化的作用域对指令不起作用
- Sencha Touch 2控制器初始化/启动不'不要开火
- Jasmine监视控制器初始化时调用的角度本地存储方法
- AngularJS控制器初始化问题,当从$scope切换到"controller as"的形式