如何将 class 设置为已使用 orderBy 排序的 ng-repeat 中的第一项?
How to set class to first item in ng-repeat that has been sorted with orderBy?
我有一个未排序的项目列表,我使用 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>
现在在我的控制器中,这就是我当前设置第一个选定项目的方式 class:
var vs = $scope;
vs.tickers = data;
vs.tickers[0].selected = true;
^ 在我需要添加 orderBy
以便项目按 alpha 顺序显示之前,这一直很有效:
我找到了 this answer here,但是它锁定第一个项目总是有 class。
稍微修改一下我的代码,我可以让其他按钮在点击时获得 class,但是 $first
项目仍然与 class 保持一致。
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;
}
};
标记或控制器中的代码需要如何更新才能解决此问题?
试一试,我不确定它如何读取排序依据上的 $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/sort
我有一个未排序的项目列表,我使用 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>
现在在我的控制器中,这就是我当前设置第一个选定项目的方式 class:
var vs = $scope;
vs.tickers = data;
vs.tickers[0].selected = true;
^ 在我需要添加 orderBy
以便项目按 alpha 顺序显示之前,这一直很有效:
我找到了 this answer here,但是它锁定第一个项目总是有 class。
稍微修改一下我的代码,我可以让其他按钮在点击时获得 class,但是 $first
项目仍然与 class 保持一致。
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;
}
};
标记或控制器中的代码需要如何更新才能解决此问题?
试一试,我不确定它如何读取排序依据上的 $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/sort