6

Perché non riesco a collegarmi alla variabile del controller all'interno del secondo controller?Uso del controller in un altro controller in AngularJS

<div ng-app="ManagerApp"> 
    <div ng-controller="MainCtrl"> 
     Main: 
     <div ng-repeat="state in states"> 
      {{state}} 
     </div> 
     <div ng-controller="InsideCtrl as inside"> 
      Inside: 
      <div ng-repeat="state in inside.states2"> 
       {{state}} 
      </div> 
     </div> 
    </div> 
</div> 

var angularApp = angular.module('ManagerApp', []); 

angularApp.controller('MainCtrl', ['$scope', function ($scope) { 
    $scope.states = ["NY", "CA", "WA"]; 
}]); 

angularApp.controller('InsideCtrl', ['$scope', function ($scope) { 
    $scope.states2 = ["NY", "CA", "WA"]; 
}]); 

Esempio: https://jsfiddle.net/nukRe/135/

Seconda ng-repeat non funziona.

risposta

3

Come si utilizza controllerAs si dovrebbe utilizzare this parola chiave nel controllo

angularApp.controller('InsideCtrl', [ function() { 
    var vm = this; 
    vm.states2 = ["NY", "CA", "WA"]; 
}]); 

Forked Fiddle

NOTA

Tecnicamente si dovrebbe seguire un approccio alla volta. Non mischiare questo modello a due insieme, utilizzare la sintassi controllerAs normale dichiarazione/ controller come avete fatto per MainCtrl utilizzando $scope

+2

se qualcuno dovesse incappare in questa risposta, è corretto, ma a quanto pare solo a partire con angolare 1.2.1. Il violino OP ha selezionato Angular 1.1.1 e Pankaj lo ha impostato su 1.2.1. Mi ci sono voluti 15 minuti di "perché questo cambiamento non funziona" per capirlo. – ToddK

0

Rimuovere

come all'interno

da qui :

<div ng-controller="InsideCtrl as inside">.210 in modo tale che:

`<div ng-controller="InsideCtrl">` 
-1
<div ng-app="ManagerApp"> 
    <div ng-controller="MainCtrl"> 
     Main: 
     <div ng-repeat="state in states"> 
      {{state}} 
     </div> 
     <div ng-controller="InsideCtrl"> 
      Inside: 
      <div ng-repeat="state in states2"> 
       {{state}} 
      </div> 
     </div> 
    </div> 
</div> 
+1

Benvenuti in Stack Overflow! Per favore, spiega * perché * questo funziona, in questo momento è una risposta scadente. – Glorfindel