2013-10-10 19 views
5

私はAngular JS Appでヘッダー/フッターを実装しようとしています。私はこれらをindex.htmlのメインにng-includeとして追加しようと考えていました。しかし、ヘッダーとフッターが静的なページであれば、これはうまくいきました。私のケースは若干異なります...ログインページにヘッダー/フッターは表示されません。あなたがログインしているかどうかに応じて、「ようこそユーザー[ログアウト]」または「ようこそゲスト[ログイン]」を表示する必要があります。AngularJS - ヘッダーとフッターのような繰り返しフラグメントの処理

ログイン情報をrootScopeに保存し、ログイン時にブール値$ rootScope.isLoggedInを設定します。最大の問題は、ng-include全体がログオフ時にリフレッシュされないということです。したがって、ng-show hideディレクティブを持つdivは、変更時に非表示/表示されません。誰かがng-switchを使って提案しました - 同じように動作します。

個々のビュー内でヘッダーコードを移動すると、すべて正常です。

同様の問題はここにある:Refresh header page in angularjs

+0

divを変更したり、いくつかのプロパティを見たりしていますか?ヘッダーとそのバインディング式にいくつかのコードテンプレートを提供します。 – Chandermani

+0

ng-controllerディレクティブを使用して、ヘッダー/フッターに$ rootScopeへのアクセス権を持つコントローラーを与え、非表示/表示ロジックを追加できますか? – ivarni

+0

ところで、$ rootScopeに物を置くことは "普通の" javascriptのglobalsと同じであり、非常に良い習慣ではありません。あなたの "isLoggedIn"を格納するサービスを使うことをお勧めします。 – ivarni

答えて

7

ivarniが示唆されているように、ヘッダ/フッタにコントローラを使用します。自分の(実験)アプリの例:のindex.htmlで

、ヘッダは、ログイン/ログアウトなど、動的に生成されたメニューが表示されます

<div id="navbar" class="navbar navbar-inverse navbar-fixed-top" 
    x-ng-controller="NavbarCtrl" x-ng-include="'app/main/navbar.html'"></div> 
NavbarCtrl

は適しスコープを構築しますapp/main/navbar.htmlテンプレート。だから、全体のマークアップがshowHeaderスコープ変数に応じて、隠されている

<div class="navbar-inner" x-ng-if="showHeader"> 
    <div class="container"> 
     <div> 
      <ul class="nav"> 
       <li x-ng-repeat="menuEntry in menuEntries"> 
        <a x-ng-href="#{{menuEntry.path}}">{{menuEntry.display}}</a> 
       </li> 
      </ul> 
     </div> 
    </div> 
    <div x-ng-if="userData.loggedIn"> 
     Wellcome {{userData.userName}}! 
     <a x-ng-click="logout()">Logout</a> 
    </div> 
    <div x-ng-if="!userData.loggedIn"> 
     <a x-ng-click="login()">Login</a> 
    </div> 
</div> 

: - テンプレートは以下のように(除去され、無関係な細部のアカウントにあなたのニーズを取って)だろう。メニューを動的に作成します(menuEntries)。 userData.loggedInに応じて、適切なログイン/ログアウトメッセージ。

+0

ありがとうございます。私は何が起こったのか分からない。私はほぼ同じようにコード化しましたが、うまくいきませんでした。その後、戻ってきて、元に戻す - すべてが問題ありません! –

+0

再度、rootScopeからisLoggedInを移動した後で動作しません。質問が更新されました... –

+0

フィドルで問題を再現できますか?これが唯一の方法です。 –

関連する問題