0

ユーザーオブジェクトからバインドされたいくつかの属性を持つビューの部分「nameplate.jade」があります。別のページで、ネームプレートから見たユーザーのリストを表示したいと考えています。だから私がやりたいのは、どういうわけか user または user._id のいずれかを送信して、自分がいるコントローラーから取得し、ネームプレートをレンダリングしてから、最初のコントローラーを保持して次のコントローラーをレンダリングすることです。

表札1枚の使い方

div(ng-controller="LoginCtrl")
    div(ng-show="logged_in()")
        a(href="/profile/{{ currentUser.handle }}")
            nameplate(user="{{currentUser}}")

ネームプレートのリストが必要な場合の使用方法

div(ng-repeat="participant in event.participants")
    nameplate(userid="participant.userid")

nameplate.jade

.nameplate

    .imageColumn
        .image
            img(src="{{ user.avatar }}")

    .otherColumn
        .nameRow
            a(ng-href="/profile/{{ user.handle }}") {{ user.handle }}

nameplate directive

.directive('nameplate', (User) ->
        restrict: 'E'
        replace: true
        scope:
            user: '@currentuser'
            userid: '@userid'
        templateUrl: '/partials/nameplate'
        link: (scope, elems, attrs) ->
            # I've tried a lot of things that didn't work here
4

1 に答える 1

1

使ってuser: '@currentuser' いたけど使うべきだったuser: '&currentuser'

キーはディレクティブのスコープ ハッシュにありました

.directive('nameplate', () ->
        restrict: 'E'
        replace: true
        scope:
            user: '&currentuser'
        templateUrl: '/partials/nameplate'
        link: (scope, elems, attrs) ->
            scope.$watch scope.user, (_user) ->
                scope.user = _user
    )

{{currentUser}} を取得しようとしましたが、分離されたスコープで実行され続け、親スコープの currentUser が変更されたときに更新されませんでした。したがって、「scope.$watch」を使用して値の変更をリッスンし、&代わりに使用し@て問題を解決しました


Angularjs ディレクティブ ガイド から

スコープ - 設定されている場合: {} (オブジェクト ハッシュ)

  • & または &attr - 親スコープのコンテキストで式を実行する方法を提供します



編集

以下の Andy のコメントを詳しく説明すると、ディレクティブの構文を次のように減らすことができます。

.directive('nameplate', () ->
        restrict: 'E'
        replace: true
        scope:
            user: '=currentuser'
        templateUrl: '/partials/nameplate'
    )

私のユースケースでは、リンク関数を指定する必要さえありません

于 2012-08-26T04:53:04.887 に答える