2016-08-02 43 views
1

需求是:當我爲某個隱藏頁面輸入URL時,頁面不應該渲染,首先一個模式應該彈出登錄,如果登錄成功那麼應該在屏幕上呈現隱藏頁面。彈出窗口模式登錄去解決狀態的隱藏頁面

我的想法是:若要在狀態下使用解析,因爲我正在使用ui-router作爲我的應用程序。

但我沒有得到如何在請求某個頁面時打開模式,同時我也可以如何防止它。

.state('deviceManagement', { 
     url: "/deviceManagement", 
     templateUrl: "partials/settings/deviceManagement.html", 
     controller: "deviceManagementCtrl", 
     resolve: { 
      check: function(engineerPageFactory){ 
       engineerPageFactory.loginEngineer(); 
      } 
     } 
    }) 

我的想法就像我打開工廠的模式,我從決心打電話。

app.factory('engineerModalFactory', function($modal){ 
    return { 
     loginEngineer: function($modal){ 
      $modal.open({ 
       templateUrl: "engineerModal.html" 
      }) 
     } 
    } 
}); 

就是這樣。請指導我正確的方式。我如何才能做到這一點。 在此先感謝!

+0

我認爲你可以實現它,而無需使用決心查詢詳情我的回答 –

+0

我可以告訴你,我做了什麼,以應付這個非常相同的情況。當用戶登錄時,會定義一些'$ rootScope'數據(例如用戶的詳細信息)。隱藏頁面的控制器檢查是否定義了這些變量,如果沒有,則將轉發頁面設置到$ rootScope中,路由到index.html,該頁面還檢查參數,並在需要時顯示登錄對話框,並且在成功登錄後,路由到隱藏頁面。不知道這是最好和最優雅的方法,但它適用於我。 – FDavidov

+0

謝謝你回答你們倆! @TheMechanic你能告訴我我可以如何實現它或有沒有解決? – PiyaModi

回答

0

要做到這一點,你不應該需要解決

創建服務checkUserService將返回承諾。

而您的控制器加載調用checkUserService方法來識別用戶是否登錄?

在承諾你會得到的答覆是真或假。

如果用戶沒有重定向它記錄到其他國家,例如:

$state.go('login')

和LoginController中,你可以打開模型

+0

我不想檢查,我想打開模式登錄,每當隱藏頁面被調用。 – PiyaModi

0

你應該採取一個模式內的toogle變量並打開頁面上的真假條件。

0

只需調用具有相同狀態的動態模板URL即可。

$stateProvider.state('deviceManagement', { 
    templateUrl: function (MyAuthService){ 

     MyAuthService 
     .checkLogin() 
     .then(function(loggedInFlag){ 
      if(loggedInFlag ===true){ 
       return 'partials/settings/deviceManagement.html'; 
      } 
      else { 
       return 'partials/auth/loginModal.html'; 
      } 

     }) 
    } 
}) 

欲瞭解更多信息,請查看本ans