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)});