メソッドとプロパティauth
を備えたサービスを提供することにより、アプリに認証機能を追加しようとしています (機能するようになると、これは実際にはユーザー オブジェクトになりますが、簡単にするために単なるブール値になります) とディレクティブ、変数の値に応じて、インライン ログイン フォームまたはログアウト ボタンのいずれかが表示されます。login
logout
loggedIn
login
loggedIn
シンプルな認証の実装:
app.factory 'auth', ($log) ->
{
loggedIn: false
login: (username, password) ->
$log.log "Login: #{username}, #{password}"
if username is "a" and password is "b"
@loggedIn = true
logout: ->
@loggedIn = false
}
(明らかに、これが機能するようになると、ログインは REST を介して行われます! これは便宜上のものであり、すべてのアプリ ロジックは従来のセッションを使用するサーバー上に存在します)
ディレクティブに問題があります。テンプレートを静的に使用template
またはtemplateUrl
選択できることはわかっていますが、現在のテンプレートを新しいテンプレートに置き換えるにはどうすればよい$compile
ですか?
app.directive "login", ($compile) ->
restrict: "E"
templateUrl: "/login.html"
scope: { }
controller: ($scope, $element, $log, auth) ->
$scope.auth = auth
$scope.$watch 'auth.loggedIn', (newVal, oldVal) ->
$log.log "Done: #{newVal} <- #{oldVal}"
# here I should switch to the other template if newVal != oldVal
おそらくテンプレートのルート要素を取得し、古いノードを削除して新しいノードを追加できることはわかっていますが、DOM 操作を行わずに角度でこれを行うためのより「宣言的な」方法があることを願っています。