Javascript $http调用与角度路由
我只是在我的angular应用程序中设置路线。第一个视图,Javascript $http调用与角度路由,javascript,angularjs,Javascript,Angularjs,我只是在我的angular应用程序中设置路线。第一个视图,List进行http调用以获取演示文稿列表 function ListController($scope, $http) { $scope.error = null; $scope.presentations = null; $scope.requesting = true; $scope.currentTitle = '-1'; $data = {
List
进行http调用以获取演示文稿列表
function ListController($scope, $http)
{
$scope.error = null;
$scope.presentations = null;
$scope.requesting = true;
$scope.currentTitle = '-1';
$data = {
'type' : 'presentations'
};
$http.post('resources/request.php', $data, {timeout:20000})
.success(function(data, status, headers, config)
{
$scope.requesting = false;
$scope.presentations = data;
})
.error(function(data, status, headers, config)
{
$scope.requesting = false;
log(status + ', data:" ' + data + '"');
}
}
);
}
我的路线是
angular.module('main',[]).
config(function($routeProvider) {
$routeProvider.
when('/', {controller:ListController, templateUrl:'resources/views/list.html'}).
when('/view/:id', {controller:VforumController, templateUrl:'resources/views/vforum.html'}).
otherwise({redirectTo:'/'});
});
我遇到的问题是,当我转到#/view/:id
,然后返回/
时,$http
调用再次被调用。我如何使它只在第一次进入应用程序时加载,并引用第一次加载的相同数据
我试图在angular之外创建一个变量,并将其设置为第一次加载的数据。然后,在
ListController
中,基本上执行了操作,如果数据为null,则执行$http调用,否则设置$scope.data=data
,但这不起作用。列表视图是空的<代码>$scope.data是构建我的列表的工具。您需要的是一个服务,在angular中是一个单例:
.factory('myDataService',函数($http){
var承诺;
返回函数($data){
如果(!角度定义(承诺)){
promise=$http.post('resources/request.php',$data,{timeout:20000});
}
回报承诺;
}
});
现在,您只需将对$http
的调用替换为对您的服务的调用:
函数ListController($scope,myDataService)
{
// ...
myDataService($data).然后(函数成功(响应){
$scope.requising=false;
$scope.presentations=response.data;
},函数错误(响应){
$scope.requising=false;
日志(状态+,数据:“+response.data+”);
});
}
您想要的是一个服务,在angular中是一个单例:
.factory('myDataService',函数($http){
var承诺;
返回函数($data){
如果(!角度定义(承诺)){
promise=$http.post('resources/request.php',$data,{timeout:20000});
}
回报承诺;
}
});
现在,您只需将对$http
的调用替换为对您的服务的调用:
函数ListController($scope,myDataService)
{
// ...
myDataService($data).然后(函数成功(响应){
$scope.requising=false;
$scope.presentations=response.data;
},函数错误(响应){
$scope.requising=false;
日志(状态+,数据:“+response.data+”);
});
}
您是否尝试将$route
传递到控制器并在$http.post()
之前检查路由?值得一试。我以前从未使用过$routeParams
。嗯,$routes
。这是我第一次。我会调查一下的,谢谢您是否尝试将$route
传递给控制器并在$http.post()
之前检查?值得一试。我以前从未使用过$routeParams
。嗯,$routes
。这是我第一次。我会调查的,谢谢。我认为我做得不对。我正在获取未定义的$data
。再说一遍,以前没有使用过工厂/服务:这里出了什么问题?如何将$data
传递给服务?这取决于它是否是静态的。因为您在这里静态地定义了它,所以您可以将它静态地放置在服务中。如果您希望它是动态的,那么您的工厂可以返回一个函数。我将更新后一种情况的答案。太棒了,成功了!var promise
服务正在检查什么?我不确定是什么原因导致应用程序不会调用$http调用两次。换句话说,promise
是否包含我加载的数据?否,promise
是一个。:-)promise提供了用于处理异步生成的数据的API$http
返回一个,我们在第一次调用从服务返回的函数时存储它。随后的每一次,promise
都已经定义,所以我们只返回现有的一个。承诺链的内部是您的数据;您必须始终从然后块中访问数据,因为您的代码不知道数据是否已加载。不管是7毫秒还是7秒都无关紧要,你不需要解释。好吧,我现在明白了。这太棒了。我越来越喜欢使用它,谢谢!我认为我做得不对。我正在获取未定义的$data
。再说一遍,以前没有使用过工厂/服务:这里出了什么问题?如何将$data
传递给服务?这取决于它是否是静态的。因为您在这里静态地定义了它,所以您可以将它静态地放置在服务中。如果您希望它是动态的,那么您的工厂可以返回一个函数。我将更新后一种情况的答案。太棒了,成功了!var promise
服务正在检查什么?我不确定是什么原因导致应用程序不会调用$http调用两次。换句话说,promise
是否包含我加载的数据?否,promise
是一个。:-)promise提供了用于处理异步生成的数据的API$http
返回一个,我们在第一次调用从服务返回的函数时存储它。随后的每一次,promise
都已经定义,所以我们只返回现有的一个。承诺链的内部是您的数据;您必须始终从然后块中访问数据,因为您的代码不知道数据是否已加载。不管是7毫秒还是7秒都无关紧要,你不需要解释。好吧,我现在明白了。这太棒了。我越来越喜欢使用它,谢谢!