Javascript 将$$hashKey添加到角度中的对象

Javascript 将$$hashKey添加到角度中的对象,javascript,angularjs,Javascript,Angularjs,枚举对象上的特定于角度的属性$$hashKey可以用于很多事情 例如DOM定位 <div ng-repeat="obj in objects"> <label for="field-{{obj.$$hashKey}}"> Label </label> <input type="text" id="field-{{obj.$$hashKey}}" /> </div> Edit2:jsFiddle我

枚举对象上的特定于角度的属性
$$hashKey
可以用于很多事情

例如DOM定位

<div ng-repeat="obj in objects">
    <label for="field-{{obj.$$hashKey}}">
        Label
    </label>
    <input type="text" id="field-{{obj.$$hashKey}}" />
</div>

Edit2:jsFiddle

我根据您的代码创建了一个虚拟示例,请参见此处:

HTML


标签
提交

希望这能为$$hashkey

使用$timeout而不使用延迟值来延迟$$hashkey属性提供一些帮助:

$timeout(function(){console.log(lastObj.$$hashKey)});

请创建一个plunker或jsFiddle,很难复制您遇到的问题。我的问题非常简单。即使对我来说,复制问题也需要时间,因为我必须去掉很多公司特定的代码,而这些代码我无法公开显示。我同意这很简单,我不是要求你发布公司代码,只是为了使用虚拟代码复制问题。检查我的编辑,我认为这个例子应该更清楚地说明发生了什么。我没有看到任何未设置$$hashkey的实例,就像问题更多地与他的$watch和getHashKey()相关,这在他的示例代码中没有得到充分的表达,因此很难提供帮助。在我的示例中,
getHashKey
函数只是一个伪函数。假设它读取
$$hashKey
属性。您的代码一点也没有复制我的场景,它也不是我实际问题的答案或解决方案。我真的不知道如何进一步简化场景。这很简单。关于你的问题,你应该用不同的变量名设置你自己的hashKey,这样你就可以利用它,而不是依赖$$hashKey,如果你真的需要一个真正低于标准的hash值的话。如果它是一个bug的话,我宁愿用角度来修补它,而不是进行丑陋的黑客攻击。我现在已经为我的问题创建了一个JSFIDLE。如果这还不够清楚的话,我就失去了对人性的信心。这似乎是一种魅力!我已经不在工作了,所以我不能确认它是否真的在工作,但我认为没有理由不这样做。不过,我会在Angulars issue tracker中为此创建一个问题。我不知道这是否如预期的那样工作,或者这是一个bug,我也不知道它在后一种情况下有多根深蒂固。可能值得探索。但我认为,您会发现这是预期的行为,因为在访问对象之前,您需要给Angular一个机会,用$$hashKey之类的东西装饰对象。如果您发现了其他情况,则值得在此更新。
var app = angular.module( 'gssApp', [] );

app.controller( 'gssAppController', [ '$scope', '$http', function ( $scope, $http )
{
  var obj = {'hash': 'test'};
  $scope.newObject = {'hash': 'test'};
  $scope.model = null;

  $scope.objects = [];

  $scope.addObj = function(){
    if($scope.model !== null && $scope.model !== undefined){
      $scope.objects.push({'hash': $scope.model});
      $scope.model = '';
      angular.forEach($scope.objects, function(key, value){
        console.log(value, key);
      }); 
    }
  }; 

}] );
<body ng-app="gssApp" ng-controller="gssAppController">
    <div ng-repeat="obj in objects">
      <label for="field-{{obj.$$hashKey}}" ng-click="alert(obj.$$hashKey)">
         Label
      </label>
      <input type="text" id="field-{{obj.$$hashKey}}" />
    </div>
    <input type="text" placeholder='add new key' ng-model="model">
    <button ng-click="addObj();">Submit</button>
</body>
$timeout(function(){console.log(lastObj.$$hashKey)});