2013-12-10 14 views
6

Direktifin içinde izlemek istediğim bir nesnem var.
Yönergenin izole kapsamı vardır ve nesne bir ana denetleyiciden gelir.Nesneyi ana denetleyiciden yalıtılmış kapsama geçirme alt yönergesi

DOM:
<div hello-directive obj-to-track="{{myObj}}"></div>

Yönergesi JS:

scope:{ 
    objToTrack:'@' 
}, 
link:function(scope,element,attrs){ 
    scope.$watch(function(newValue){ 
     //Inside here, newValue is a JSON string 
     //So is scope.objToTrack 
    }); 
} 

JSON.parse()
teşekkür yanında ana kumandadan gerçek bir nesneyi almak için yine de var mı.

+1

Eğer nesne ve JSON arasında bocalama gibi görünüyor:

scope.$watch("objToTrack", function(newval, oldval) { ... }); 

olarak kullanın. JSON bir veri dağıtım dizesi biçimidir. Uygulamanızın içinde, – charlietfl

+0

teslim edilen verilerden türetilen nesneler ve dizilerle uğraşıyorsunuz. Neden kafamın karıştığını düşündüğünüzden emin değilsiniz. – Francisc

+0

tamam ... yorum yap '' burada, newValue bir JSON dizgisidir '. Bu – charlietfl

cevap

8

Sadece "=" bağlama kullanın:

scope:{ 
    objToTrack: "=" 
} 

zamanki gibi İzleyin:

<div hello-directive obj-to-track="myObj"></div> 
+3

Biliyorum, ama bu iki yönlü bağlamaya izin veriyor. Bu büyük bir sorun değil, ancak direktifin mümkünse yazabilmesine izin vermem. Eğer mümkün değilse, o zaman yapmak zorunda kalacak. – Francisc

+0

Yazma izin veremezsiniz - "myObj" bir "ilkel" değer değilse. Yani, referansın bir kopyasını 'myObj'ye iletseniz bile, yönerge hala myObj'ün gerçek üyelerine erişebilir. Eğer angular.copy() işlevi, yönlendiriciye iletilmeden önce, muhtemelen "" & quot; ciltleme ile birleştiğinde yapılabilir, ancak bu muhtemelen daha hantaldır. –

+0

Tamam, teşekkürler. Direktifimi değiştirmemeyi rica edeceğim. :) – Francisc