2017-06-13 72 views
0

我有3個組成部分角1.x的組件,UI路由器1層的狀態變化

  1. 應用組件
  2. 登錄組件
  3. 儀表板組件

應用組件

應用程序組件是組件樹的主要組件。該組件還包含基本佈局,該佈局由內容的標題和包裝器組成。

<div class="container-fluid"> 
    <navigation routes="$ctrl.routes"></navigation> 
</div> 

<ui-view></ui-view> 

登錄元器件

登錄組分是呈現登錄表單,並做它魔術的成分。

控制板組件

儀表板組件呈現的用戶數據。

美國

{ 
    name: 'app', 
    url: '', 
    abstract: true, 
    component: 'appComponent', 
    resolve: { 
     routes:() => Routes 
    } 
}, 
{ 
    name: 'app.login', 
    url: '/', 
    label: 'Login', 
    data: { 
     navigations: ['navbar-no-user'] 
    }, 
    component: 'loginComponent', 
    resolve: { 
     redirectUrl:() => 'app.dashboard' 
    } 
}, 
{ 
    name: 'app.dashboard', 
    url: '/', 
    label: 'Dashboard', 
    data: { 
     navigations: ['navbar'] 
    }, 
    component: 'dashboardComponent' 
} 

方案

遊客正在加載的應用程序,一個導航欄應該是隻有導航欄,沒有用戶的項目,如登錄可見。訪問者登錄併成爲用戶,現在應該看到只有導航欄項目的導航欄,如儀表板。

問題

我找了這個場景的解決方案,通常有一個onStateChange事件,我可以用這一個控制器內。我現在看到的唯一選項是呈現每個組件中特定的導航。

+1

我通常會爲儀表板添加一個父狀態(登錄後所有狀態)。你可以輕鬆地添加一個抽象的父狀態「儀表板」,其主視圖就像你爲「應用程序」狀態所做的那樣。 –

+0

@ daan.desmedt這可能是一個正確的選項。你知道其他可能的策略嗎? – Sedenko

+0

您可以使用'rootscope'變量來指示何時顯示視圖部分......但我認爲'狀態'視圖對您的'摘要循環來說更邏輯且密度更低。 –

回答

2

我通常會介紹一箇中間/父母狀態來做到這一點。

例如,我將定義以下狀態:

  • app(摘要)
  • app.login
  • app.main(摘要)
  • app.main.dashboard
  • app.main.home

如果我想爲登錄用戶例如只顯示導航,我的路由模板應該是這樣的:

app路徑模板

<ui-view></ui-view> 

app.main路線模板

<div class="container-fluid"> 
    <navigation routes="$ctrl.routes"></navigation> 
</div> 
<ui-view></ui-view> 
+0

Upvoted您的答案,正如我上面的評論中所說 - 這也是我的首選解決方案。 –