可以在uj.router的angularjs中解析$ http get请求吗?

CEN*_*EDE 7 javascript http resolve angularjs

我有以下代码(下面),它们对我和我至少需要的东西都很有效.但我对此持怀疑态度,我感觉它太好了,不可能.由于我正在努力$http克服异步行为,这对我$http在控制器上全局使用请求中的响应对象有很大帮助.

我只是想知道它是正确的方式还是至少是一个可接受的方式,或者我应该使用传统的方法来使用$httpAngularJS'文档中的那个,然后继续我的项目.答案对我很有帮助.谢谢.

$ stateProvider

$stateProvider
    .state('test', {
        url: '/test',
        templateUrl: 'partial.template.html',
        resolve : {
            foo : function($http) {
                return $http({
                    method: 'GET',
                    url: '/api/something'
                });
            },
            bar : function($http) {
                return $http({
                    method: 'GET',
                    url: '/api/something'
                });
            },
        },
        controller: 'mainController',
    })
Run Code Online (Sandbox Code Playgroud)

调节器

.controller('mainController',['$scope', 'foo', 'bar', function($scope, foo, bar){
    $scope.fooObj = foo;
    $scope.barObj = bar;
}])
Run Code Online (Sandbox Code Playgroud)

Oka*_*ari 7

我认为这可能是ui-router解决方案的最佳用例.

无论如何,我更喜欢将我的http调用包装到服务中,并将此服务调用到解决方案中,而不是直接使用$ http.

这可能如下所示:

app.service('FooService',function($http){
  var service={}; 
  service.getFoo = function(){
      return $http({
                method: 'GET',
                url: '/api/something'
             });
  }
  return service;
});
Run Code Online (Sandbox Code Playgroud)

多亏了你可以在你的应用程序周围调用这个方法(并在同一时间集中它).

在控制器中:

app.controller('MyController', function($scope, FooService) {
    $scope.controllerName = "MyController";
    FooService.getFoo().success(function(foo){
        $scope.foo = foo
    });
});
Run Code Online (Sandbox Code Playgroud)

决心:

$stateProvider
.state('test', {
    url: '/test',
    templateUrl: 'partial.template.html',
    resolve : {
        foo : function(FooService) {
            return FooService.getFoo();
        },
    },
    controller: 'MyController',
})
Run Code Online (Sandbox Code Playgroud)

继续这种方法,你的方式很好.

希望它有所帮助.

编辑:建立一个plunker来添加这些方法的具体例子.