亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

angularjs ui-route resolve 沒有正常工作

angularjs ui-route resolve 沒有正常工作

拉風的咖菲貓 2018-10-18 14:11:09
在angularjs ui-route 某個state中配置了一個resolve,要求登錄后才能跳轉Login: ['LoginResolve',function(LoginResolve){return LoginResolve.Login;}]這個LoginResolve具體實現如下:class LoginResolve {          login (LoginService, $q) {        if (LoginService.isLoggedIn() !== true) {                 return LoginService.checkLoggedInStatus()                  .catch(_error);         }        function _error () {            return $q.reject('requireLogin');         }     } } LoginResolve.prototype.login.$inject = ['LoginService', '$q'];在 if (LoginService.isLoggedIn() !== true)這個位置斷點發現不會跳進來,不知道怎么回事。我的app是這樣:angular.module('myapp',[uiRoute, common.name, loginRoute.name, personRoute.name])common是這樣:不知道為什么在personRoute的config中的resolve使用ES6的LoginService無法工作,我用LoginTry改寫一下:然后替換LoginService就可以好使一次,第二次就不會發送http請求了.
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

把resolve中的{return LoginResolve.Login;}]改成{LoginResolve.Login();}]每次就會跳進if判斷語句中去了,但是這時候又顯示LoginService是undefined,估計這個service沒有注入進來,明明已經inject了。哎,再查一查,有結果再放上來。

現在修改了一下,問題得到了解決:
正確的resolve應該這么寫:

Login: ['LoginResolve', function(LoginResolve){return LoginResolve.login();}]

正確的LoginResolveES6的寫法如下:

class LoginResolve {
    constructor (LoginService, $q){
        Object.assign(this, {LoginService, $q});
    }
    login () {        const self = this;        if (self.LoginService.isLoggedIn() !== true) {            
    return self.LoginService.checkLoggedInStatus()
                 .catch(_error);
        }        function _error () {            return self.$q.reject('requireLogin');
        }
    }
}

LoginResolve.$inject = ['LoginService', '$q'];

當然你也可以采用function形式的LoginResolve

function LoginResolve (LoginService, $q) {
    this.login = function(){        if (LoginService.isLoggedIn() !== true) {            
    return LoginService.checkLoggedInStatus()
                 .catch(_error);
        }        function _error () {            return $q.reject('requireLogin');
        }
    }}
LoginResolve.$inject = ['LoginService', '$q'];

最開始不能通過LoginResolve.prototype.login.$inject = ['LoginService', '$q']來注入LoginService$q我再研究一下,謝謝評論。


查看完整回答
反對 回復 2018-11-18
  • 1 回答
  • 0 關注
  • 579 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號