首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >事件,将变量设置为true。

事件,将变量设置为true。
EN

Stack Overflow用户
提问于 2014-08-05 06:57:20
回答 2查看 84关注 0票数 0

这是一个愚蠢的范围问题,我不擅长Javascript。非常肯定,我不知道如何将变量的值返回到父作用域(例如,查找AppCtrl中的*)

我有两个控制器。AppCtrl (parent)MainCtrl (child)

代码语言:javascript
代码运行次数:0
运行
复制
<div ng-controller="AppCtrl">
  <div ng-controller="MainCtrl">
  </div>
</div>

我正在MainCtrl中获取一些随机的JSON数据。

代码语言:javascript
代码运行次数:0
运行
复制
.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

代码语言:javascript
代码运行次数:0
运行
复制
.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'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-05 07:38:48

如果条件只运行一次,那么您可以对每个$on侦听器调用If条件,或者组合多个侦听器,并检查是否加载了所有内容或not.both方式是否相同。

代码语言:javascript
代码运行次数:0
运行
复制
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');
        }
    });
 });
});

http://jsfiddle.net/k3H4Q/

票数 1
EN

Stack Overflow用户

发布于 2014-08-05 07:13:16

  1. 它永远不会打印“loaded”,因为这个语句只运行一次

if(load[0]=== true && load[1] === true && load[2] == true) { console.log('loaded'); } 2.在角度控制器之间共享数据更好地使用服务https://docs.angularjs.org/guide/services

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25132864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档