我正在开发angularjs(1.6)并希望在角度服务中创建一个功能,当控制器调用及其服务具有类似
的ajax代码时调用它app.service('myServ', function($http, $window){
this.backdoor=function(){
$http({
method : 'get',
url : 'web_services/backdoor.php'
}).then(function(res){
// console.log(res.data);
// console.log(res.data.length);
if(res.data.length==0)
{
$window.location.href="index.html";
}
});
}});
我的控制器代码是:
app.controller('myCtrl', function($scope, $http, $window, myServ, $routeParams){
myServ.backdoor();
});
所以上面的代码(服务)检查是否创建了用户会话,但问题是在服务器端没有创建会话然后我的html页面加载一秒然后服务器将调用$ window.location.href所以请帮助我做正确的方法......
答案 0 :(得分:0)
我认为您需要angular.config
中的解决。它的工作是在重定向到您的路由/状态(ngRoute
或ui.router
)之前运行一些代码。
要做到这一点,你需要:
app.service('myServ', function($http, $window){
this.backdoor=function(){
return $http({ // return the promise if you need to use the values in the controller
method : 'get',
url : 'web_services/backdoor.php'
}).then(function(res){
if(res.data.length==0){ $window.location.href="index.html"; }
else{ return res.data; } // return the values
});
}});
和主要部分:
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/your_page/:route_params', {
templateUrl: 'your_page_partial.html',
controller: 'myCtrl',
resolve: {
resolvedVal: function resMyService(myServ, $routeParams){ // setting an injectable instance `resolvedVal`
/* use $routeParams values as parameters? */
return myServ.backdoor(); // calling your service
}
}}
);
}]);
然后只需将你的决心注入控制器:
app.controller('myCtrl', function($scope, $http, $window, resolvedVal){ // note: resolvedVal injection
$scope.my_data = resolvedVal;
});