2014-12-01 9 views
6

Sto usando "controller as" syntax e ho ogni controller in un file separato avvolto in un IIFE, come raccomandato in Giovanni Papa AngularJS Style Guide.Come accedere all'ambito genitore dal controller figlio quando si utilizza "controller As" e IIFE?

C'è un modo per proprietà di accesso dichiarati nel campo di applicazione del controllo genitore dal controller bambino?

Posso accedervi nella vista facendo {{parent.variableOfParent}}, ma non so come farlo dal JS del controller figlio.

Plnkr

P.S. Potrebbe essere utile creare un tag per la guida allo stile poiché ci sono alcune domande a riguardo.

risposta

10

Si sta essenzialmente parlando di condivisione dei dati tra i controller. Beh secondo me [e anche da altri;)], il modo migliore per farlo sta usando i servizi ..

  1. creare un servizio.

  2. Iniettare il servizio in entrambi i controller e salvare il riferimento del servizio nell'ambito dei controller.

  3. Ora è possibile accedere ai dati sia nella vista che nei controller.

yourApp.service("sharedService", function() { 
    this.data = "123"; 
}) 

yourApp.controller("parentController", function(sharedService) { 
    $scope.sharedService = sharedService; 
}); 

yourApp.controller("childController", function(sharedService) { 
    $scope.sharedService = sharedService; 
}); 

Ora tutto ciò che si vuole "condividere" tra i due controller, può essere posizionato all'interno del servizio.

Inoltre, nel codice HTML, è possibile utilizzare lo stesso riferimento di servizio per accedere ai dati:

esempio

<div ng-app='app' ng-controller='ParentCtrl as parent'> 

     <div ng-controller='ChildCtrl as child'> 
     {{parent.sharedService.data}}<br> <!-- both will print the same value --> 
     {{child.sharedService.data}}<br> <!-- both will print the same value --> 
     </div> 
    </div> 
+0

Grazie! Sono felice che tu abbia menzionato anche la possibilità di accedere al servizio dalla vista. – Nelu

+0

Felice che sia salito @NeluMalancea –

Problemi correlati