Angular js ng-repeat和指令

时间:2013-06-07 18:40:43

标签: javascript html5 dom angularjs coffeescript

我有一个可以加星标的项目列表。悬停时用于存档,删除和星形弹出的按钮。但是,如果该项目已加星标,则该星形不会淡出但仍然可见。 enter image description here

我已经创建了一个指令'list'来处理效果。

app.directive "list",() ->
    restrict: 'A'
    link: (scope, element, attrs) ->
        selected = false
        element.on 'mouseenter', ->
            $ element.find(".sub-menu > label, .sub-menu > a").show()
        element.on 'mouseleave', ->
            if attrs['list'] is "true"
                $ element.find(".sub-menu > .ng-archive, .sub-menu > a").hide()
            else
                $ element.find(".sub-menu > label, .sub-menu > a").hide()

        element.on 'click', ->
            selected =! selected
            if selected then element.addClass 'list-selected' else element.removeClass 'list-selected'
            console.log scope

            # I want to execute the following statement when initializing
        if attrs['list'] is "true"
            $ element.find(".sub-menu > .ng-archive, .sub-menu > a").hide()
        else
            $ element.find(".sub-menu > label, .sub-menu > a").hide()

实际的li元素

<li ng-repeat="item in items" list="{{item.starred}}">

问题在于,如果某个项目已加星标,则在我将鼠标悬停在元素上而不是数据本身初始化之前,红色星号不会显示。在那之后,一切正常。

在初始化时,list属性似乎没有从{{item.starred}}获取值。当我将值输出到控制台时,我得到了undefined。只有当我将鼠标悬停在元素上时,才会使用{{item.starred}}

中的值正确分配list属性

1 个答案:

答案 0 :(得分:0)

您是否从服务器获取item.starred值?如果是这样,那么期望获得undefined,因为该指令在从服务器返回的数据之前被初始化。

我建议使用CSS来显示红星,而不是使用javascript hideshow事件。或者,您可以使用角度watch来观察Item值的更改并运行javascript代码。