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”的数据)。