Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ui.router';上执行$http get请求可以吗;安格拉斯的决心是什么?_Javascript_Angularjs_Http_Resolve - Fatal编程技术网

Javascript 在ui.router';上执行$http get请求可以吗;安格拉斯的决心是什么?

Javascript 在ui.router';上执行$http get请求可以吗;安格拉斯的决心是什么?,javascript,angularjs,http,resolve,Javascript,Angularjs,Http,Resolve,我有下面的代码(如下),它们非常适合我,至少符合我的需要。但我对此有点怀疑,我有一种感觉,这太好了,不可能是真的。由于我正在努力解决$http的异步行为,这对我在控制器上全局使用$http请求中的响应对象帮助很大 我只是想知道这是不是正确的方法,或者至少是一种可以接受的方法,或者我应该使用传统的使用$http的方法,在我继续我的项目之前,先学习一下。答案对我很有帮助。多谢各位 $stateProvider $stateProvider .state('test', { u

我有下面的代码(如下),它们非常适合我,至少符合我的需要。但我对此有点怀疑,我有一种感觉,这太好了,不可能是真的。由于我正在努力解决
$http
的异步行为,这对我在控制器上全局使用
$http
请求中的响应对象帮助很大

我只是想知道这是不是正确的方法,或者至少是一种可以接受的方法,或者我应该使用传统的使用
$http
的方法,在我继续我的项目之前,先学习一下。答案对我很有帮助。多谢各位

$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',
    })
.controller('mainController',['$scope', 'foo', 'bar', function($scope, foo, bar){
    $scope.fooObj = foo;
    $scope.barObj = bar;
}])
控制器

$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',
    })
.controller('mainController',['$scope', 'foo', 'bar', function($scope, foo, bar){
    $scope.fooObj = foo;
    $scope.barObj = bar;
}])

我认为这可能是ui路由器解析的最佳用例

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

这可能是这样的:

app.service('FooService',function($http){
  var service={}; 
  service.getFoo = function(){
      return $http({
                method: 'GET',
                url: '/api/something'
             });
  }
  return service;
});
正因为如此,您可以在应用程序周围调用此方法(同时将其集中化)

在控制器中:

app.controller('MyController', function($scope, FooService) {
    $scope.controllerName = "MyController";
    FooService.getFoo().success(function(foo){
        $scope.foo = foo
    });
});
决心:

$stateProvider
.state('test', {
    url: '/test',
    templateUrl: 'partial.template.html',
    resolve : {
        foo : function(FooService) {
            return FooService.getFoo();
        },
    },
    controller: 'MyController',
})
继续这个方法,你走的很好

希望有帮助


编辑:创建一个用于添加这些方法的具体示例。

在我看来很好。这就是
resolve
的目的。你担心什么?路由器中甚至有这样的例子docs@Thomas我在想,也许这不是最好的方法,我不想花时间在这个方法上,然后在未来它可能会导致我的世界崩溃(lol)。如果你说没事,那么我相信你。谢谢,伙计。:)@查理:是这样吗?谢谢,先生嗯,实际上我在这个方法上有点问题,伙计。似乎解析阻止加载模板?这很奇怪,但控制台上没有错误。是的,实际上在解析中的承诺得到解决之前,模板不会加载。如果您不想这样做,只需继续使用服务并使用“控制器”示例。你可以添加一些加载器,它会像一个符咒一样工作。这听起来可能是新手,但我如何解决承诺?事实上,现在一切都好了。谢谢:)@GreenFox在答案中添加了一个plunker来说明。实际上,当您得到响应时,$http承诺就得到了解决。你不必自己做。处理$http响应可以在控制器中使用.success(函数(数据))完成,并在解析中自动完成(您将获得带有“property.data”的数据)。