$on事件,设置一个变量为true

$on event, set a variable to true

本文关键字:一个 变量 true 事件 on 设置      更新时间:2023-09-26

这是一个愚蠢的范围问题,我不擅长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'

If condition将只运行一次,因此您可以在每个$on侦听器中调用If condition,或者组合多个侦听器并检查是否加载了所有内容。两种方法都是一样的

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

小提琴演示

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

if(load[0]=== true && load[1] === true && load[2] == true) { console.log('loaded'); } 2. 要在Angular的控制器之间共享数据,最好使用services https://docs.angularjs.org/guide/services.