Javascript 如何在父作用域获取restful数据后在子作用域中运行函数

Javascript 如何在父作用域获取restful数据后在子作用域中运行函数,javascript,angularjs,rest,scope,Javascript,Angularjs,Rest,Scope,我的页面有父作用域和子作用域。子范围显示属于父范围中数据的列表 比如说, 有一个部门有三名员工。部门在父范围内,员工在子范围内检索 问题是父范围通过restful api调用获取部门。然后,子范围调用另一个api来获取部门中的员工 通过这样做,子范围需要知道父范围中的部门。但是,chlid scope api调用通常在父级获取部门之前触发。因此,即使有员工,也没有员工不高兴 我正在寻找解决方案。如何确保在员工之前获取部门 我不知道您的代码是如何工作的,但我的想法是,执行department AP

我的页面有父作用域和子作用域。子范围显示属于父范围中数据的列表

比如说,

有一个部门有三名员工。部门在父范围内,员工在子范围内检索

问题是父范围通过restful api调用获取部门。然后,子范围调用另一个api来获取部门中的员工

通过这样做,子范围需要知道父范围中的部门。但是,chlid scope api调用通常在父级获取部门之前触发。因此,即使有员工,也没有员工不高兴

我正在寻找解决方案。

如何确保在员工之前获取部门

我不知道您的代码是如何工作的,但我的想法是,执行department API调用的函数应该返回一个承诺,子控制器可以使用该承诺

myApp.controller('DepartmentCtrl', function($scope, $q){  
    $scope.department = '';

    $scope.getDepartment = function(){
        var deferred = $q.defer();

        // Here, we simulate an HTTP call or another asynchronous operation
        setTimeout(function(){
            $scope.department = 'AnAwesomeDepartment';
            deferred.resolve();
        }, 1500);

        return deferred.promise;
    }
});

myApp.controller('EmployeesCtrl', function($scope, $q){
    $scope.employees = [];

    $scope.getEmployees = function(){
        $scope.$parent.getDepartment().then(
            function(){
                $scope.employees = ['Mark', 'Jane', 'Lisa'];
            }
        );
    }

    // Get everything
    $scope.getEmployees(); 
});


当然,您可以考虑一些改进,例如缓存部门,或者在进入子状态之前。

您可以在子范围中查看部门模型,并且无论何时从API获取部门模型,都可以触发员工API

基本上就是我说的

  • 将部门模型传递(绑定)到子范围
  • 在子范围中查看部门模型
  • 每当部门模型发生更改时,您都会收到回调,因此此时您可以触发员工请求
  • 另一种方法是,您可以在获得部门数据时广播该消息,并且您的子作用域必须侦听该消息


    我希望这能解决您的问题。

    您能提供您已有的代码吗?在对子作用域中的员工数据进行API调用之前,请检查部门数据是否可用,如果不可用,请不要运行调用子作用域将在其他页面中重新使用。所以,在我的例子中,使用子函数调用依赖项不是一个好主意。我喜欢将范围变量从父对象传递给子对象。