这是一个愚蠢的范围问题,我不擅长Javascript。非常肯定,我不知道如何将变量的值返回到父作用域(例如,查找AppCtrl
中的*)
我有两个控制器。AppCtrl (parent)
和MainCtrl (child)
<div ng-controller="AppCtrl">
<div ng-controller="MainCtrl">
</div>
</div>
我正在MainCtrl
中获取一些随机的JSON数据。
.controller('MainCtrl', function ($scope, $http) {
$scope.datas = [];
$http.jsonp('http://filltext.com/?rows=10&delay=1&fname={firstName}&callback=JSON_CALLBACK').
success(function(data){
$scope.datas[0] = data;
console.log($scope.datas);
$scope.$emit('load::1');
});
$http.jsonp('http://filltext.com/?rows=10&delay=2&fname={firstName}&callback=JSON_CALLBACK').
success(function(data){
$scope.datas[1] = data;
console.log($scope.datas);
$scope.$emit('load::2');
});
$http.jsonp('http://filltext.com/?rows=10&delay=4&fname={firstName}&callback=JSON_CALLBACK').
success(function(data){
$scope.datas[2] = data;
console.log($scope.datas);
$scope.$emit('load::3');
});
});
当数据成功时,我将向AppCtrl
发出一条消息。
在AppCtrl
上,我监听发出的消息并设置数组var load = true
。
.controller('AppCtrl', function ($scope, $http) {
//*****
var load = [];
$scope.$on('load::1', function(){
//how do i return this value to the var above?
load[0] = true;
});
$scope.$on('load::2', function(){
load[1] = true;
});
$scope.$on('load::3', function(){
load[2] = true;
});
if(load[0]=== true && load[1] === true && load[2] == true) {
console.log('loaded');
}
});
当这三者都设置为true时,我希望console.log
注销'loaded'
。
发布于 2014-08-04 23:38:48
如果条件只运行一次,那么您可以对每个$on侦听器调用If条件,或者组合多个侦听器,并检查是否加载了所有内容或not.both方式是否相同。
myapp.controller('AppCtrl', function ($scope, $http) {
//*****
var load = [];
angular.forEach(['load::1', 'load::2', 'load::3'], function (value) {
$scope.$on(value, function (event) {
load.push(true);
if (load[0] === true && load[1] === true && load[2] == true) {
alert('loaded');
}
});
});
});
发布于 2014-08-04 23:13:16
if(load[0]=== true && load[1] === true && load[2] == true) { console.log('loaded'); }
2.在角度控制器之间共享数据更好地使用服务https://docs.angularjs.org/guide/services。
https://stackoverflow.com/questions/25132864
复制相似问题