草庐IT

javascript - AngularJS Ng-重复和重复

coder 2024-07-29 原文

我在 SO 中看到很少有问题讨论在 ng-repeat 中不允许重复。我的问题有点不同。就我而言,我很困惑,因为我即使数组中有重复的对象也没有收到错误

这是我的 HTML 代码

<table>
      <tr ng-repeat="item in items">
        <td> {{ item.email}}</td>           
      </tr>
</table>

下面是填充数组的代码

app.controller('MainCtrl', function($scope) {


$scope.items=[];

  $scope.items.push({
           "id":"1",
           "email":"a@b.com"});
  $scope.items.push({
           "id":"1",
           "email":"a@b.com"});

  $scope.items.push({
           "id":"2",
           "email":"x@y.com"});
  $scope.items.push({
           "id":"2",
           "email":"x@y.com"});


});

根据我的理解我应该得到错误并且数组中有重复的对象

然而它得到了完美的呈现。这是plunker链接

ng-repeat-demo

显然我缺少一些基本的东西。有人可以指出我理解上的差距吗?

编辑

这是我在我的应用程序中遇到的情况(出于明显的原因,仅更改了电子邮件 ID)

ExampleApp.filter("extractEmail", function (){

  return function(items){
    //console.log("test" + input[0].highlight.file[0]);
    var filtered = [];

    console.log(" items == " + items);


    angular.forEach(items, function(item){

      if (item){
        var obj = item.highlight.file[0].toString().match(/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/);

      if (obj) {
        //console.log(obj[0]);
        filtered.push(obj[0]);
      }

      }


    }); 

    console.log(filtered);
    return filtered;
  }

});

我的 console.log 打印 [“a@gmail.com”、“a@gmail.com”、“b@gmail.com”、“b@gmail.com”]

我得到的错误

Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: x in clusterState| extractEmail, Duplicate key: string:a@b.com, Duplicate value: “a@b.com"

我用类似的代码更新了 plunker。无法重现

第二次编辑

问题出在我使用的版本上: Angular JS 1.0.x 支持重复无法重现 http://plnkr.co/edit/qrOez7aZ7X1jsOrmkfiP?p=preview

使用更高版本能够重现

http://plnkr.co/edit/q3oPCrW3RepxvWSZ1LB1?p=preview

最佳答案

javascript 中的对象是通过引用进行比较,而不是通过值进行比较。
一个对象的内容是否与另一个对象完全相同并不重要,如果引用不指向同一个对象,它们就是不同的。
例如:

// In this case "var a" and "var b" points to different objects.
var a = {};
var b = {};

a == b; // false

// Here, they points to the same one
var a = {};
var b = a;

a == b; // true

如果您需要每个条目都不同,您必须自己检查每个条目。
Angular ngRepeat 有一个语法变体,它使用 track by 让您决定哪个条目是不同的(或重复的)。

<div ng-repeat="entry for entries track by entry.id">{{entry.email}}</div>

关于javascript - AngularJS Ng-重复和重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30277888/

有关javascript - AngularJS Ng-重复和重复的更多相关文章

  1. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  2. ruby - 正则表达式 - 保存重复捕获的组 - 2

    这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","

  3. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  4. Ruby 从数组中删除重复的对象 - 2

    我无法使用传统的Ruby方法从下面的数组user_list中删除所有重复对象,从而获得预期的结果。有解决这个问题的聪明方法吗?users=[]user_list.eachdo|u|user=User.find_by_id(u.user_id)users 最佳答案 这个怎么样?users=User.find(user_list.map(&:user_id).uniq)这具有作为一个数据库调用而不是user_list.size数据库调用的额外好处。 关于Ruby从数组中删除重复的对象,我们在

  5. Ruby 删除可枚举列表中的重复项 - 2

    ruby中有没有一个很好的方法来删除可枚举列表中的重复项(即拒绝等) 最佳答案 对于数组你可以使用uniq()方法a=["a","a","b","b","c"]a.uniq#=>["a","b","c"]所以如果你只是(1..10).to_a.uniq或%w{antbatcatant}.to_a.uniq因为无论如何,几乎所有您实现的方法都将作为Array类返回。 关于Ruby删除可枚举列表中的重复项,我们在StackOverflow上找到一个类似的问题: h

  6. ruby - 重复排列 - 2

    我知道如何创建值数组的排列。例如:[*1..3].permutation(2)这导致以下六种排列:[1,2][1,3][2,1][2,3][3,1][3,2]但这个结果缺少三个排列,它们是相同值的组合,即:[1,1][2,2][3,3]如何获得所有排列,包括上面重复的排列? 最佳答案 尝试#repeated_permutation:[*1..3].repeated_permutation(3).to_a>pp[*1..3].repeated_permutation(3).to_a[[1,1,1],[1,1,2],[1,1,3],[1

  7. ruby - 在 Ruby 数组中收集重复项的最快/单行方法? - 2

    像这样转换数组的最快/单行方法是什么:[1,1,1,1,2,2,3,5,5,5,8,13,21,21,21]...进入像这样的对象数组:[{1=>4},{2=>2},{3=>1},{5=>3},{8=>1},{13=>1},{21=>3}] 最佳答案 要获得所需的格式,您可以附加一个调用以映射到您的解决方案:array.inject({}){|h,v|h[v]||=0;h[v]+=1;h}.map{|k,v|{k=>v}}虽然它仍然是单行的,但它开始变得凌乱了。 关于ruby-在Ruby

  8. ruby-on-rails - 从 ruby​​ 中的数组中删除重复项 - 2

    我想输出一个散列数组,其中name对所有散列都是唯一的。我将如何使用ruby​​执行此操作?这是我的输入:input=[{:name=>"Kutty",:score=>2,:some_key=>'value',...},{:name=>"Kutty",:score=>4,:some_key=>'value',...},{:name=>"Baba",:score=>5,:some_key=>'value',...}]我希望输出看起来像这样:output=[{:name=>"Kutty",:score=>4,:some_key=>'value',...},{:name=>"Baba",:s

  9. sql - Rails:使用 Postgres 创建对象时重复 ActiveRecord::RecordNotUnique? - 2

    我正在使用Rails4应用程序,它需要创建大量对象以响应来自另一个系统的事件。当我调用create!时,主键列上出现非常频繁的ActiveRecord::RecordNotUnique错误(由PG::UniqueViolation引起)我的模型之一。我在SO上找到了其他答案,建议挽救异常并调用retry:beginTableName.create!(data:'here')rescueActiveRecord::RecordNotUnique=>eife.message.include?'_pkey'#Onlyretryprimarykeyviolationslog.warn"Retr

  10. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

随机推荐