如何组合我的控制器AngularJS?

时间:2013-01-24 14:45:41

标签: javascript angularjs

我有我的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发送到另一个。但是getData不是Angular Controller(它是一个js函数)而且它没有使用我的args($ scope和$ http)。 请告诉我,如何调用getdata第一页加载并将数据发送到MainCtrl。 如果你知道,请告诉我,我可以用我的MainCtrl做什么,他只能从$ routeProvider打电话。现在起初它从html(ng-controller)调用,然后从$ routeProvider调用。

2 个答案:

答案 0 :(得分:0)

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

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

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

         }

    }

答案 1 :(得分:0)

将数据包装在服务中。以下是两个很好的答案,展示了如何做到这一点:

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

您的服务还可以cache the results of the $http request