angularjs:$ resolve块在控制器之前执行

时间:2013-11-29 07:18:48

标签: angularjs

我是AngularJS的新手。我正在尝试在angularjs $http api内进行app config调用.Below是$ http api调用的代码。

         .when('/programme/:programmename', {                          
          templateUrl:"programme/info.html" ,

          resolve: {
            execute: function(userAPI,$rootScope,$route){
                var url = $route.current.params.programmename;
                url = url.replace(/-/g, ' ') ;
                userAPI.getProgrammeid({programmename: url } , function(r){
                $rootScope.Programmeid= r.getprogrammeidbyname.programmeidbyname.programmeid }

                )}
                }

  })

根据Angularjs文档,解析块在控制器和模板之前执行,但在我的情况下,控制器在解析块之前执行 我尝试了承诺,但我陷入其中。 这是因为$http api call which is (userAPI.getProgrammeid({programmename: url }.....)内的resolve block吗? 我有点困惑

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

execute实际上是否会返回任何内容?它需要返回一个在你的函数完成时解决的promise。

我认为你误解了如何使用决心。它是取一些东西注入你的控制器。如果目标是获得programmeid,则解析将如下所示:

resolve: {
    programmeid: function (userAPI, $q, $route) {
        var deferred = $q.defer();

        var url = $route.current.params.programmename;
        url = url.replace(/-/g, ' ') ;
        userAPI.getProgrammeid({ programmename: url }, function (r) {
            deferred.resolve(r.getprogrammeidbyname.programmeidbyname.programmeid);
            // now that our promise is resolved, our controller should execute
        });

        return deferred.promise;
    }
}

然后您可以在控制器中访问它,如下所示:

app.controller('someCtrl', function ($scope, programmeid) {
    $scope.programmeid = programmeid;
});