【问题标题】:How to combine ng-class checks and ng-click comparisons?如何结合 ng-class 检查和 ng-click 比较?
【发布时间】:2015-04-20 21:59:26
【问题描述】:

我有一个 ng-repeat,其中第一个项目需要选择类,然后单击每个项目然后更改选择。

<li ng-repeat="ticker in tickers"
    data-ng-class="{'selected':$first}"
    ng-click="selectTicker(ticker.ticker)">{{ticker.ticker}}</li>

^ 这可以使第一项默认具有selected 的类。

<li ng-repeat="ticker in tickers"
    data-ng-click="toggleTicker.item = $index"
    data-ng-class="{'selected':toggleTicker.item == $index}"
    ng-click="selectTicker(ticker.ticker)">{{ticker.ticker}}</li>

^ 感谢this question。上面的工作是基于点击添加selected的类,但默认不再选择第一项。

我的问题是如何将两者结合起来?我尝试了以下方法,但没有成功:

data-ng-class="{'selected':$first && toggleObject.item == $index}"

我的控制器:

var vs = $scope;

ApiFactory.getWatchList().then(function(data) {
    vs.tickers = data.data.tickers;
    vs.toggleTicker = {item: -1};
    vs.toggleTicker.item = vs.tickers[0];
    vs.loadingDone = true;
    console.log(vs.tickers[0]);
});

【问题讨论】:

    标签: javascript angularjs angularjs-ng-click angularjs-ng-class


    【解决方案1】:

    您正在将 item 初始化为控制器中索引 0 处的对象,但在其他任何地方它似乎都是一个数字。如果您只想使用索引(因为您的点击将其设置为数字),请尝试以下操作:

    var vs = $scope;
    
    ApiFactory.getWatchList().then(function(data) {
        vs.tickers = data.data.tickers;
        vs.toggleTicker = {item: 0}; // set index 0 as the selected index
        vs.loadingDone = true;
        //console.log(vs.tickers[0]); // what if there are no items?
    });
    

    html

    <li ng-repeat="ticker in tickers"
        data-ng-click="toggleTicker.item = $index"
        data-ng-class="{'selected':toggleTicker.item == $index}"
        {{ticker.ticker}}
    </li>
    

    使用$first 不好,因为相同的商品总是是第一个(除非您重新订购)。使用ng-clickdata-ng-click 不好,因为它们本质上是相同的,也许只有一个会真正被调用?

    【讨论】:

      【解决方案2】:

      这不是在 ng-class 中完成的,而是在控制器或 ng-init 中完成的:

      data-ng-init="toggleObject.item = tickers[0]" 
      data-ng-class="{'selected':toggleObject.item == $index}"
      

      我还是建议你在控制器里做。

      【讨论】:

      • 谢谢,现在试试...刚刚将我的控制器代码添加到问题中
      • 不客气!所以控制器解决方案是这样的:vs.toggleObject.item = vs.tickers[0]
      • 嗯,现在两者都不起作用,没有错误 :( 更新了我的控制器,看看我是否可以组合一个简单的 plunkr
      • 一个 plunker 会很棒,只需硬编码您的工厂数据,这样您就不会在上面浪费时间。
      猜你喜欢
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 2016-10-28
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多