【问题标题】:add class to first item in ng-repeat with jquery使用 jquery 将类添加到 ng-repeat 中的第一项
【发布时间】:2016-02-07 03:10:25
【问题描述】:

我是复杂指令的新手,我正在尝试使用 jquery 向 ng-repeat 中的第一项添加一个类(不幸的是我的项目正在使用它),就像在指令的控制器中一样:

   var highlightFirst = function(){
      $('.pointer').find('.fa-angle-down-first').next().addClass('boldit');
      console.log('in here')
    }

    highlightFirst();

    //also tried this:
    angular.element(document).ready(function(){
      $('.pointer').find('.fa-angle-down-first').next().addClass('boldit');
      console.log('in here')
    });

我之后立即调用该函数。什么都没发生。

当我运行$('.pointer').find('.fa-angle-down-first').next().addClass('boldit'); 在 chrome 开发工具中,我想要加粗的实际上是加粗的......为了让这个特定的解决方案正常工作,我缺少什么?什么是最好的角度方法?

【问题讨论】:

  • 尝试使用这个: var highlightFirst = (function(){ $('.pointer').find('.fa-angle-down-first').next().addClass('boldit '); console.log('在这里') });
  • 如果我没记错的话,那是我的原始代码?
  • 另外我需要更多代码来看看你是否正确调用了函数
  • 不,它不一样,它有额外的 pranteses 和 ;结束
  • 不明白为什么我需要额外的括号。我已更新以包含更多代码

标签: javascript jquery angularjs


【解决方案1】:

你实际上并不需要 jquery 并且应该尽可能避免在 Angular 应用程序中使用 jquery,你应该使用 ng-class$first 这里是工作 demo

<ul>
    <li ng-repeat="item in items" ng-class="{'fooClass': $first}">{{ item }}</li>
</ul>

$first 的好处是当您对ng-repeat 进行排序时,它仍然可以正常工作。

【讨论】:

  • 当然首选角度方式,但我不知道。因此,如果您已经测试过您的代码可以正常工作,我会给 +1
  • 这很酷,但我需要在嵌套的 ng 重复中访问第一项中的第一项,因此上述使用 $first 的解决方案更适合我的需求
  • 它仍然可以在嵌套的 ng-repeat 中工作,我将创建一个小提琴
  • @imsiso 我创建了一个工作演示 :) devdropper87,我演示了嵌套的 ng-repeat 和具有特定类的第一项,请参阅演示。
  • 这实际上比公认的解决方案要好。 @ncm 正在使用 Angular ng-repeat,因此应该尽快了解 $first。这也允许排序和分页,并且不会被诸如按索引选择项目中的第一个项目之类的东西所吸引。可靠的答案,@LouieAlmeda。
【解决方案2】:

只需使用 ng-class:

<ul>
    <li ng-repeat="item in items" ng-class="{'myClass': item == items[0]}">{{ item.property }}</li>
</ul>

编辑:链接到更多详细信息

https://docs.angularjs.org/api/ng/directive/ngClass

【讨论】:

  • @devdropper87 如果您开始对 ng-repeat 中的项目进行排序和过滤,这将中断
【解决方案3】:

让我们试试这个:

$(document).ready(function(){
  $('.pointer').find('.fa-angle-down-first').next().addClass('boldit');
  console.log('in here');
});

关于你的第一种方式:

var highlightFirst = function(){
  $('.pointer').find('.fa-angle-down-first').next().addClass('boldit');
  console.log('in here');
};

highlightFirst();

我应该说你应该确保你的代码是在页面和元素加载之后运行的。

【讨论】:

  • 这个高度依赖jquery,很快就会打破angular的双向绑定
  • 所以你不喜欢我的回答?或者你的意思是它的好?对不起,我的英语不好
  • Angular 应用程序不应该高度依赖 jquery :)
  • 是的,我同意。但它仍然有用,因为它包含其他信息。
  • 我明白,因为我在使用 Angular 之前来自 jquery 世界。 AngularJS 想要将你的数据和视图分开,总有办法避免使用 jquery,当你习惯它时你会喜欢它的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多