AngularJS:$$ hashkey是一个可靠的密钥

时间:2014-10-15 11:20:02

标签: javascript arrays angularjs

问题

我对角度数组/对象上$$hashkey的属性感兴趣。

  1. 每次重新加载时,每个生成的hashkey都是相同的 页;快速测试告诉我是的,但我有点假设它 不会?
  2. 如果你更新/添加到现有数组,那就是旧的hashkey 保持一致吗?
  3. 如果以上情况属实,是否有办法从数组中获取 哈希键? - 因为我可以自己滚动但是在我重新创建轮子之前我想我会问。
  4. 实施例

    观点将包括:

    • 表单数据(示例有1个表单)
    • 元素数据(示例有2个元素)
    • 元素选项数据(示例每个元素有2个选项)

    获取方法:

    angular.get($$hashkey);
    

    然后,您将传递元素的hashkey,它将在完整数组中返回对该数组的引用。

    最后数据是:

    {
        form_id: 1
        form_desc: 'xxx',
        form_name: 'name 1',
        Elements: [
            {
                element_id: 1,
                element_name: 'element1',
                default_value: null,
                disabled: "0",
                element_type: "image",
                ElementOptions: [
                    {
                        show: false,
                        sort_order: 0,
                        value: "ar",
                    },
                    {
                        show: true,
                        sort_order: 1,
                        value: "rw",
                    }
                ],
            },
            {
                element_id: 2,
                element_name: 'element2',
                default_value: null,
                disabled: "0",
                element_type: "image",
                ElementOptions: [
                    {
                        show: false,
                        sort_order: 0,
                        value: "ar",
                    },
                    {
                        show: true,
                        sort_order: 1,
                        value: "rw",
                    }
                ],
            }
        ]
    }
    

2 个答案:

答案 0 :(得分:3)

$$ hashkeys只会针对函数和对象进行计算,所以如果你想跟踪那些不属于这些类型的东西,那么你就有了这个限制。

$$ Hashkeys看起来像...... (函数||对象):N ...

其中N只是为每个$$ HashKey计算的调整后的增量值+ 1。 因此,在许多情况下,这可能是跨页面加载的相同值。但是,当作为页面初始化的一部分查询多个数据源时,加载异步的数据将导致差异,并且无法保证返回的顺序。在这种情况下,您必须对所有异步数据进行编组,然后按特定顺序将该数据分配给您的作用域,以确保一致的$$ hashkeys。

在链接到我们DOM的数组中移动项目(通过ng-repeat)不会更改项目$$ hashkey。删除它并重新添加它。

我不会将$$ Hashkey用于我自己的家务,因为它是AngularJS的内部。

答案 1 :(得分:2)

当我没有标识符时,我使用了这个内部私有属性。 我认为,它非常实用,但不推荐。