Angularjs 角跟踪哈希键不打印

Angularjs 角跟踪哈希键不打印,angularjs,Angularjs,我正在从一本书中学习,但我找到了一个似乎不起作用的例子。我有这个: <div ng-repeat="note in ctrl.notes track by note.id"> {{note.$$hashKey}} <span class="label"> {{note.label}}</span> <span class="author" ng-bind="note.done"></span> </div&

我正在从一本书中学习,但我找到了一个似乎不起作用的例子。我有这个:

<div ng-repeat="note in ctrl.notes track by note.id">
    {{note.$$hashKey}}
    <span class="label"> {{note.label}}</span>
    <span class="author" ng-bind="note.done"></span>
</div>
问题是,如果没有track by note.id,它将从3开始打印,但在添加track by note.id时,它应该按id打印。。。但是它不打印任何内容,它是空白的,并且控制台中没有错误。这是正常行为还是我做错了什么


笔:

这是正常的
$$hashkey
是angular记住哪个对象与哪个html元素相关的方法


使用“track by note.id”告诉angular“在这里,改用它。我提供了一组
注释
,每个
注释
都有一个
id
属性,并且它是唯一的。”当使用跟踪表达式时,angular不需要
$$hashkey
,因此它不会生成一个。您的书可能打印错误或已过期。

我知道它用note.id替换了原始计数器,但为什么它也不打印id?那么,这首歌有什么用呢?它不会打印id,因为您的html正在查找$$hashkey。如果您想打印出id,那么使用以下命令:{note.id}},但是如果想打印id,我可以从一开始就写{{note.id},而不使用$$hashkey,那么为什么“track by”会出现呢?使用“track by whatever”可以在不修改原始对象的情况下使用ng repeat;使用时性能稍好一些;您还可以交换具有该对象的不同实例(但具有相同id)的对象,angular会将它们视为相同对象,而不会重新绘制DOM。这比我在这篇评论中解释的要复杂得多。您的示例代码在使用或不使用“跟踪方式”时都可以正常工作。这是一个更好的优化实践,应该尽可能地进行优化。如果我知道该教程的目标,意图可能会更清楚。这是本书和脚本:
        this.notes = [
            {
                id: 1,
                label: 'Changed Note',
                done: false,
                someRandom: 4242
            },
            {
                id: 2,
                label: 'Second Note',
                done: false
            },
            {
                id: 3,
                label: 'Finished Third Note',
                done: true
            }
        ];