1

我有我的 MainCtrl(从 $routeProvider 和 html 调用):

function MainCtrl($scope, $routeParams){
  //send data(see below) to AngularTemplate for apdate page
}

我有我的函数,它可以获取任何数据:

function getData($scope, $http){
  /*
  * Nav Data(here my navigate-structure fo site)
  */
  $http({method: 'GET', url: 'data/main.json'}).
  success(function(data){
    //work with data and send it to MainCtrl
  });
  /*
  * News Data(Here my news)
  */
  $http({method: 'GET', url: 'data/news.json'}).
  success(function(data){
    //work with data and send it to MainCtrl
  });
}

现在我明白了如何使用 .$on 和 .$broadcast 将数据从一个 Ctrl 发送到另一个 Ctrl。但是 getData 不是 Angular 控制器(它是一个 js 函数),它不理解我的 args($scope 和 $http)。请告诉我,如何在第一页加载时调用 getdata 并将数据发送到 MainCtrl。如果你知道,请告诉我我能用我的 MainCtrl 做什么,他只能从 $routeProvider 调用。现在它首先从 html(ng-controller) 调用,然后从 $routeProvider 调用。

4

2 回答 2

0

将您的数据获取代码包装在服务中。这里有两个很好的 SO 答案,展示了如何做到这一点:

上面的示例还展示了如何将您创建的服务(例如myService)注入到控制器中。您可以根据需要将此服务注入到尽可能多的控制器中。由于 Angular 服务是单例的,因此无论您的服务注入了多少控制器,您的数据获取代码都只会有一个实例。

您的服务还可以缓存 $http 请求的结果

于 2013-01-26T05:35:32.773 回答
0

将 getData 函数放在角度控制器中。它会理解 $scope 和 $http 服务

或制作 mainCtrl.... 的原型方法 set() 并在其中传递 $scope.var = value

       MainCtrl.prototype = {
        set = function(value){
            $scope=value;

         }

    }
于 2013-01-24T14:51:03.770 回答