【问题标题】:Angular: why $index isn't always evaluated inside ng-repeat?Angular:为什么 $index 并不总是在 ng-repeat 中进行评估?
【发布时间】:2015-11-07 14:19:19
【问题描述】:

这是我的例子:http://jsfiddle.net/w2Ltohsq/

通过 console.log 记录的输入上的任何更改(和焦点)事件。所以,点击任何输入。

我希望控制台输出如下:

Object {index: 1, 1: Object}

但我明白了:

Object {index: 1, $index: Object}

所以$index 在几乎同一个地方进行了评估和评估。

ng-repeat="item in List track by index"ng-repeat="(i, item) in List" 没有帮助。

编辑:感谢大家,所有答案都是正确的,我正在用一个有效的小提琴来投票。

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-ng-repeat


    【解决方案1】:

    您正在定义一个属性命名 $index。如果您希望属性以 $index 的值命名,则必须使用括号表示法:

    input[$index] = {item: item}
    

    Updated fiddle

    【讨论】:

    • 呃,我在问input[$index]['item'] = item 之前尝试过,但没有成功。确定 js 在这种情况下会像 Perl 一样动态创建所需的结构,因此它也有一些角度特性。
    【解决方案2】:
    { index: $index, $index: { item: item } }
    

    是 JavaScript 对象字面量,第二个 $index 是该对象的 keys(字段)之一。永远不会在对象文字中评估键。值是。

    就像在 JavaScript 中一样,如果你写的话

    var i = 22;
    var obj = {i : i};
    

    您将拥有一个对象,其键名为 i,其值为 22。代码相当于

    var obj = {'i' : i};
    

    我也很难理解为什么你有这个 getTopScope() 函数。

    【讨论】:

    • 我相信getTopScope() 方法是为了避免遍历$parent 链——这是不使用对象作为模型的结果,ng-model 指向其属性。这是“如果您的型号名称中没有点,则说明您做错了。youtube.com/…
    • @JAAulde 你可能是对的。但实际上,模型中有一个点(嗯,它是一个括号,但效果相同):input[$index]。 OP 所需要的只是将$scope.input = []; 添加到控制器中。
    【解决方案3】:

    我相信这不是关于 Angular 的 $index 的问题,而是关于 javascript 中的对象文字的问题。我不相信您可以使用表达式作为对象文字语法中的键。

    Javascript expression to define object's property name?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多