javascript - $on 事件,将变量设置为 true

标签 javascript angularjs scope angularjs-scope dom-events

这是一个愚蠢的范围问题,而且我不擅长 JavaScript。很确定我不知道如何将变量的值返回到父范围(例如在 AppCtrl 中查找 ****)

我有 2 个 Controller 。 AppCtrl(父级)MainCtrl(子级)

<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'

最佳答案

If 条件只会运行一次,因此您可以对每个 $on 监听器调用 if 条件,或者组合多个监听器并检查是否所有内容都已加载。两种方法是相同的。

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');
        }
    });
 });
});

Fiddle Demo

关于javascript - $on 事件,将变量设置为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132864/

相关文章:

java - 外部类可以调用其内部类的方法吗?

javascript - 防止在文本输入中插入无效字符

javascript - javascript 中的 return 语句不退出函数?

angularjs - Webpack导入html模板未加载

c++ - 在不同作用域访问同名变量

c# - 找不到类型或命名空间,但它在那里

javascript - 为什么 console.log 会这样?

javascript - 弹出窗口出现在错误的位置

angularjs - 错误 : [$injector:unpr] Unknown provider: in AngularJS Service Test

javascript - 将我的整个应用程序连接成一个 HTML、JS 和 CSS 文件