将$$ hashKey添加到Angular中的对象

Ras*_*mus 8 javascript angularjs

枚举对象上的Angular特定属性$$hashKey可用于很多事情.

例如DOM定位;

<div ng-repeat="obj in objects">
    <label for="field-{{obj.$$hashKey}}">
        Label
    </label>
    <input type="text" id="field-{{obj.$$hashKey}}" />
</div>
Run Code Online (Sandbox Code Playgroud)

在一些奇怪的情况下,我现在体验到了$ hashKey prop尚未设置在我想要访问它的对象上,即使它正在与Angular重复.有没有办法在初始化对象时自己设置此属性?

编辑:我的猜测是存在某种形式的执行顺序问题,当Angular尚未处理重复时我会访问该属性.我正在深深地观察一个物体,在那个物体内是一个带有物体的数组,它正在重复.它也是我需要访问该$$hashKey属性的其中一个对象.

简单的例子;

var MyController = function($scope, Obj)
{
    $scope.obj = {
        list: [obj, obj, obj, obj]
    };

    $scope.$watch("obj", function()
    {
        var lastObj = $scope.obj.list[$scope.obj.list.length - 1];
        console.log(lastObj.$$hashKey); // Undefined?
    }, true);

    $scope.addObj = function()
    {
        $scope.obj.list.push(new Obj());
    };
};
Run Code Online (Sandbox Code Playgroud)

Edit2:jsFiddle http://jsfiddle.net/2sbWp/2/

Mar*_*ine 5

在$ hashKey属性可用之前,使用$ timeout且没有延迟值延迟:

$timeout(function(){console.log(lastObj.$$hashKey)});
Run Code Online (Sandbox Code Playgroud)

小提琴的工作叉

  • 也许值得探索。我认为你会发现这是预期的行为,因为你需要让 Angular 有机会在访问它们之前用 $$hashKey 之类的东西来装饰你的对象。如果您发现其他情况,那么这里值得更新。 (2认同)