2

我有一个未排序的项目列表,我orderBy用来按名称按字母数字排序。

<li class="ticker-li"
    ng-repeat="ticker in tickers | orderBy:'ticker'"
    ng-class="{'selected':ticker.selected}">

    <div class="ticker"
         ng-click="unselectAll(); ticker.selected = !ticker.selected;
         selectTicker(ticker);
         revealTickerOptions()">
         {{ticker.ticker}}
    </div>

现在在我的控制器中,这就是我当前设置所选类的第一个项目的方式:

var vs = $scope;
vs.tickers = data;
vs.tickers[0].selected = true;

^ 这工作得很好,直到我需要添加,orderBy以便项目按 alpha 顺序显示:

在此处输入图像描述

我在这里找到了这个答案,但是它将第一项锁定为始终拥有该课程。

稍微修改一下我的代码,我可以让其他按钮在单击时获得该类,但是该$first项目仍然保留在该类中。

ng-class="{'selected':$first || ticker.selected}"

在我的控制器中,这是我的unselectAll函数,它不适用于'selected':$first

vs.unselectAll = function() {
    for (var i = 0; i < vs.tickers.length; i++) {
        vs.tickers[i].selected = false;
    }
};

在此处输入图像描述

标记或控制器中的代码应如何更新以解决此问题?

4

1 回答 1

2

试一试,我不确定它是如何读取排序依据的 $index 的,但是去掉 $first 并将这个 init 语句放在那里。

<li class="ticker-li"
    ng-repeat="ticker in tickers | orderBy:'ticker'" 
    ng-init="$index ? ticker.selected = false : ticker.selected = true"
    ng-class="{'selected':ticker.selected}" ng-click="unselectFirst($index)">

我认为这是黑客与否之间的灰色区域,从技术上讲,您并没有在 ng-init 中对属性进行别名,但我认为这是一条很好的路线。另一种解决方案是对控制器中的数组进行排序,文档中有一个按字母顺序排序的示例,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array /种类

于 2015-05-06T03:04:00.960 回答