2014-04-28 2 views
0

Je suis en train de transmettre mon adresse à une directive appelée gmaps:variable n'est pas transmise à la portée de la directive?

restrict: 'EA', 
    template: '<div class="gmaps"></div>', 
    replace: true, 
    scope: { 
     address: '=address' 
    }, 

l'adresse est définie dans le contrôleur:

app.controller('MapCtrl', function($scope) { 

    $scope.streetNumber = "12"; 
    $scope.streetName = "sussex street"; 
    $scope.city = "sydney"; 
    $scope.country = "australia"; 

    $scope.address = $scope.streetNumber + "," + $scope.streetName + "," + $scope.city + "," + $scope.country; 

    console.log($scope.address); 


}); 

Lorsque je tente de vérifier l'adresse est indéfini:

link: function postLink(scope, iElement, iAttrs) { 
     console.log('address', scope.address); 

L'adresse plunkr est: http://plnkr.co/edit/CNSgfgTem0VH2RTgVPjn

Répondre

0

Supprimer cette partie:

scope: { 
    address: '=address' 
} 

Voir la updated plunker (il est en train de faire ce que vous avez l'intention).

Je pense que chaque fois que vous faites address: '=address', il utilise le isoler la portée (voir les docs AngularJS pour directives et 'étendue isolat' Ctrl + F).

Vous pouvez tester cela en indiquant console.log($scope) dans le contrôleur et console.log(scope) dans la directive. Vous verrez que vos ID scope sont tous les deux différents (003 et 004), ce qui indique qu'ils font référence à deux portées différentes. Chaque fois que vous supprimez address: '=address', vous pouvez à nouveau utiliser la portée console.log dans la directive et le contrôleur, et vous verrez que les deux ID sont maintenant 003, ce qui signifie qu'ils font maintenant référence à la même portée.

+0

excellent merci Josh – user603007

+0

Pas de problème, content de pouvoir aider. –

+1

@ user603007 Ceci est correct, mais ... Si vous prévoyez d'utiliser plus d'un élément gmaps dans votre application, vous devrez créer un contrôleur séparé pour chacun d'entre eux, sinon ils écraseront l'adresse de chacun et d'autres informations à chaque fois vous en créez un nouveau. L'idée de la portée isolate est que chaque élément gmaps aura sa propre portée. Si vous avez utilisé '= address' comme vous le faisiez auparavant, il suffit de passer une valeur pour' address = "123 Some Street" 'sur l'élément html représentant la carte, et cette adresse sera liée à cette carte. C'est toute l'idée de la portée isolate. – jshanley

Questions connexes