2

メソッドとプロパティauthを備えたサービスを提供することにより、アプリに認証機能を追加しようとしています (機能するようになると、これは実際にはユーザー オブジェクトになりますが、簡単にするために単なるブール値になります) とディレクティブ、変数の値に応じて、インライン ログイン フォームまたはログアウト ボタンのいずれかが表示されます。loginlogoutloggedInloginloggedIn

シンプルな認証の実装:

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 操作を行わずに角度でこれを行うためのより「宣言的な」方法があることを願っています。

4

0 に答える 0