2015-01-13 69 views
0

我正在開發一個應用程序使用angularjs,這是我第一次使用角。雖然,我已經開始瞭解它,並開發了應用程序的某些部分,但我被困在一個特定的點。調用ajax響應中的應用程序配置方法 - AngularJS

我想實現登錄功能,所以當頁面加載時,我正在驗證用戶並將他重定向到登錄頁面。成功登錄後,我將某些用戶值存儲在某個配置提供程序中。

現在我正在使用一個API,它具有自己的身份驗證方法,並且他們公開了可用於驗證用戶的ajax方法。

我在下面提供了一個片段。我主要做的是使用外部API,對用戶進行身份驗證,一旦通過身份驗證,我就可以使用API​​的另一個Ajax方法(稱爲「GetUserDetails」)獲取與該用戶關聯的角色。

而在「GetUserDetails」的響應中,我注入了一個提供程序並設置了一些值,所以我可以在我的應用程序中使用它。

這裏的問題是app.config方法永遠不會被調用/執行。我的意思是ajax請求正在返回響應,並且警報顯示在我的頁面上,但是app.config永遠不會執行。

但是,如果我在GetUser方法的done()中調用相同的app.config,則app.config會執行並將值存儲在我的提供程序中。但我希望GetuserDetails值也可以在我的應用程序執行任何操作之前進行存儲,因爲我想根據用戶執行某些功能。

下面是我在main.js功能文件

function(angular,angularRoute,app,routes,configService){ 
    var $html = angular.element(document.getElementsByTagName('html')[0]); 

    angular.element().ready(function() { 

     $.c.authentication.getUser() 
      .done(function(response){ 
       if(response.userName!="anonymous"){ 

       $.c.ajax({ 
        method: "GetUserDetails", 

        parameters: { 
         User: response.user 
        } 
       }) 
       .done(function(res) { 
        alert("I have reached the destination"). 

        app.config(['configServiceProvider', function(configServiceProvider){ 
        configServiceProvider.setLoginStatus(true); 
        configServiceProvider.setUserName(response.userName); 
        configServiceProvider.setUserObject(response); 
        configServiceProvider.setUserRoleDetails(res); 
        }]); 
       }) 
       .fail(function(res) { 
        alert("Error while getting user roles ."+res); 
       }); 
        angular.resumeBootstrap([app['name']]); 
       } 
       else 
       { 
        app.config(['configServiceProvider', function(configServiceProvider){ 
         configServiceProvider.setLoginStatus(false); 
         configServiceProvider.setUserName(response.userName); 


        }]); 

        //Show Login Screen 
        var url = window.location.href.split("#")[0]; 
        window.location.href = url + "#/Login"; 
        angular.resumeBootstrap([app['name']]); 
       } 
      }) 
      .fail(function(response){ 
       $rootScope.isLoggedIn=false; 
      }); 

    }); 

這裏是我的configServiceProvider

define(['../app'],function(app){ 

return app.provider('configService', function(){ 
    var options={}; 
    this.setLoginStatus = function(status){ 
     //$rootScope.isLoggedIn = status; 
     options.isLoggedIn=status; 
    }; 
    this.setPreLoginInfo=function(info){ 
     options.preLoginInfo=info; 
    }; 
    this.setUserName=function(name){ 
     options.username=name; 
    } 

    this.setUserObject = function(userObject) { 
     options.userObject = userObject; 
    } 

    this.setUserRoleDetails = function(userRoleDetails) { 
     options.userRoleDetails = userRoleDetails; 
    } 

    this.$get=[function(){ 
     if(!options){ 

     } 
     return options; 
    }]; 
}); 

})

誰能請解釋我是怎麼回事錯在這裏或者我是什麼失蹤 ?

另外,是否有任何替代實現相同的功能?

回答

0

找出上述情況不起作用的原因並非如此。由於我已經花了很多時間在這方面,所以我找到了解決方法來實現與使用服務相同的方法。