在$ stateprovider的控制器中调用服务

时间:2014-12-05 05:21:21

标签: javascript angularjs

现在我可以在我的AppCtrl中执行我的服务,但这不对。因为只有当用户指向page2时才需要该服务。当page2状态处于活动状态时,如何执行我的服务?我试过决心,但无法正常工作。

    app.config(function ($stateProvider, $urlRouterProvider) {


        $urlRouterProvider.otherwise('home');

        $stateProvider.state('home', {
          url: '/home',
          templateUrl: 'home.html'
        })

        $stateProvider.state('page2', {
          url: '/page2/:topicId',
          templateUrl: 'page2.html'
        // call my service here?
    });

    });

app.controller('AppCtrl', ['$scope', 'getTopicContent', function($scope,getTopicContent){
    getTopicContent.request().success(function(data){
        $scope.myList = data;
    });
}]);


app.factory('getTopicContent', ['$http', function($http){

    var query = function() {
        return $http({
            url: "http://www.corsproxy.com/mydata.me/level1/list.php",
            method: "GET"
        })
    }

    return {
        request : function(){
            return query();
        }

    }
}]);

1 个答案:

答案 0 :(得分:0)

您可以为您的页面创建一个控制器并在那里注入服务。

$stateProvider.state('page2', {
      url: '/page2/:topicId',
      templateUrl: 'page2.html',
      controller: 'Page2Ctrl'
});

然后你的控制器看起来像

app.controller('Page2Ctrl', ['$scope', 'getTopicContent', function($scope,getTopicContent){
    getTopicContent.request().success(function(data){
        $scope.myList = data;
    });
}]);

如果你想尝试解决,你可以做这样的事情

$stateProvider.state('page2', {
      url: '/page2/:topicId',
      templateUrl: 'page2.html',
      controller: 'Page2Ctrl',
      resolve: {
          content: getTopicContent.request().success(function(data){
                      return $scope.myList = data;
                   });
      }
});

然后在您的Page2Ctrl中,您可以验证此内容

app.controller('Page2Ctrl', ['$scope', 'getTopicContent', function($scope, content){
    if (content) {
        $scope.content = content;
    }    
}]);
相关问题