2014-05-06 17 views
8

Sayısız nesnede $$hashKey angular'e özgü özellik pek çok şey için kullanılabilir.

Örneğin DOM-hedefleme; Şimdi $$ hashKey prop henüz bunu Eğik ile tekrarlanır ediliyor olsa bile bunu erişmek istediğiniz bir nesne üzerinde ayarlı değil yaşıyorum bazı garip durumda

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

. Nesneyi başlatırken bu özelliği kendiniz ayarlamanın bir yolu var mı?

Düzenleme: Tahminim, Angular henüz tekrarlamayı işlemediğinde, mülke eriştiğim bazı yürütme siparişi sorunu olduğunu gösteriyor. Bir nesneyi derinden izliyorum, bu nesne içinde tekrarlanan nesnelerin bulunduğu bir dizi var. Ayrıca, $$hashKey özelliğine erişmem gereken nesnelerden biri üzerinde.

Basit örnek;

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

Edit2: jsFiddle Sana koduna göre bir kukla örneğini oluşturdu

+0

bir plunker veya jsFiddle oluşturun, sorunu çoğaltmak için zor sen – SoluableNonagon

+0

sorum yaşıyoruz oldukça basittir. Sorunu çoğaltma benim için bile zaman alacaktır, çünkü genel olarak görüntülenemeyen şirkete özgü bir çok kodu çıkarmam gerekiyor. – Rasmus

+0

Bunun basit olduğunu kabul ediyorum, sadece kod kodunu kullanarak sorunu çoğaltmak için şirket kodu göndermenizi istemiyorum. – SoluableNonagon

cevap

5

kullanın $ zaman aşımı erteleme:

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

A working fork of your Fiddle

+0

Bu bir çekicilik gibi görünüyor! Artık işte değilim, bu yüzden çalıştığını teyit edemiyorum, ama bunun için bir neden göremiyorum. Bunun için Angulars issue tracker'da bunun için bir sorun oluşturacağım. Bunun amaçlandığı gibi çalışıp çalışmadığını veya bir hata olup olmadığını bilmiyorum ve ikinci durumda ne kadar köklü olduğunu bilmiyorum. – Rasmus

+1

Keşfetmeye değer olabilir. Angular, Angular'a, nesnenize erişmeden önce $$ hashKey gibi şeylerle süslemenize olanak tanımak için beklenen davranış olduğunu düşünürsünüz. Aksini öğrenirseniz, burada bir güncellemeye değecektir. –

-1

http://jsfiddle.net/2sbWp/2/ buraya bakın: http://plnkr.co/edit/9PNc6bcy1TO4Zaeyuvwq?p=preview

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

}]); 

HTML

<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> 

Umarım bu biraz ışık üzerinde tutuyor $$ hashkey

$$ hashKey özelliği kullanılabilir olana kadar herhangi bir gecikme değeri ile
+0

$$ hashkey'in ayarlanmadığı herhangi bir örnek alamıyorum – SoluableNonagon

+0

Sorunun, $ saatiyle ve daha fazla örnek kodunda yeterince açıklanmayan getHashKey() için özel bir şey olduğu gibi görünüyor ve bu nedenle ile yardım. –

+0

Örneğimde 'getHashKey' işlevi yalnızca bir kukladır. Sadece '$$ hashKey' özelliğini okuyormuş gibi davran. Kodunuz senaryoyu bir bit kopyalamıyor, ayrıca asıl soruma bir cevap veya çözüm de değil. Senaryoyu daha fazla nasıl basitleştireceğimi gerçekten bilmiyorum. Bu kadar basit. – Rasmus