加载html视图之前的角度函数调用

时间:2018-02-09 12:31:56

标签: angularjs

我正在开发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所以请帮助我做正确的方法......

1 个答案:

答案 0 :(得分:0)

我认为您需要angular.config中的解决。它的工作是在重定向到您的路由/状态(ngRouteui.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; 
});