0

我有一个可以加星标的项目列表。悬停时会弹出存档、删除和星号按钮。但是,如果该项目已加星标,则星标不会淡出但仍可见。 在此处输入图像描述

我创建了一个指令“列表”来处理效果。

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}}

4

1 回答 1

0

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

我建议使用 CSS 来显示红星,而不是使用 javascripthideshow事件。或者,您可以使用 angularwatch来观察Item值的变化并运行 javascript 代码。

于 2013-06-07T19:20:18.700 回答