2015-11-18 1 views
1

J'ai des problèmes pour renvoyer les données de la directive au contrôleur. Ma directive est avec une portée isolée où j'utilise '=', comme dans la documentation, pour avoir une liaison de données bidirectionnelle mais d'une certaine manière la liaison de données à sens unique est là mais pas à double sens. Mes modifications apportées aux données de la directive ne sont pas repoussées vers le contrôleur. Quelques codes snipts:Retour de la directive angulaire d3 au contrôleur

controller 
======== 
$scope.ap1 = "1111"; 
$scope.ap2 = "1111"; 

html 
======= 
<d3-zones 
    ng-if="vzones" 
    zone-data="vzones" 
    ap1-data="ap1" 
    ap2-data="ap2"> 
</d3-zones> 

directive 
======== 
scope: { 
zoneData: '=zoneData', 
ap1Data: '=ap1Data', 
ap2Data: '=ap2Data' 
}, 
And later in the link function, i am updating these two values on a particular event like this: 
scope.$apply(function() { 
    scope.ap1Data = somevalue; 
    scope.ap2Data = somevalue; 
}); 

Dans ma directive, je me sers d3 pour dessiner des rectangles. Dans ap1Data & ap2Data je voulais retourner les ID de deux rectangles qui vient d'être tiré. Je ne sais pas ce qui ne va pas ici. S'il vous plaît laissez-moi savoir si vous pouvez le comprendre.

Merci, Kashif

+0

s'il vous plaît fournir plunkr lien ou quelque chose si le problème peut être identifié. – micronyks

+0

Convenu que vous devez poster un exemple de travail. C'est un scénario assez simple, donc cela devrait aider. –

+0

J'ai effectivement compris le problème. Permettez-moi de poster ma solution comme une réponse. – Kashif

Répondre

0

Le comportement est vraiment bizarre. J'ai en fait créé un petit code de test, très pertinent, pour tester ce problème. Si je passe un type de données complexe tel que array, json ou object cela fonctionne bien mais ne fonctionne pas avec le type de données primitif comme number, null ou string. Donc ce que je l'ai dit, je viens de remplacer mes deux variables avec un objet de données comme:

controller 
======== 
$scope.dataModel { 
    ap1: "1111" 
    ap2: "2222" 
} 

html 
======= 
<d3-zones 
    ng-if="vzones" 
    zone-data="vzones" 
    ap1-data="dataModel.ap1" 
    ap2-data="dataModel.ap2"> 
</d3-zones> 

directive 
======== 
scope: { 
zoneData: '=zoneData', 
ap1Data: '=ap1Data', 
ap2Data: '=ap2Data' 
}, 
And later in the link function, i am updating these two values on a particular event like this: 
scope.$apply(function() { 
    scope.ap1Data = somevalue; 
    scope.ap2Data = somevalue; 
}); 

puis passé ce dataModel à la directive comme indiqué ci-dessus. Maintenant ça fonctionne bien. Toute modification apportée à ce datModel est renvoyée au contrôleur.

Je vous remercie d'avoir examiné la question.