0

我有一个视图部分“nameplate.jade”,它具有从用户对象绑定的几个属性。在另一个页面上,我想查看用户名牌上的用户列表。所以我想做的是以某种方式发送用户或用户。_id 我将从我所在的任何控制器获得并让它渲染铭牌,然后继续渲染下一个,第一个持续存在。

我如何将它用于一个铭牌

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 回答