12

Wahrscheinlich ist dies eine einfache Frage für fortgeschrittene eckige Benutzer, aber ich habe dieses Problem nicht irgendwo gut erklärt.

Also habe ich meinen Code umstrukturiert, als ich festgestellt habe, dass ich zwei Controller in einer Ansicht habe, was kein Problem ist, wenn der Controller 'ACtrl' vom $ stateProvider gebunden wird und der Controller 'BCtrl' in der Ansicht gebunden ist von ng-controller. Aber wenn ich versuche, wie diese beide in dem $ stateProvider zuweisen:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: 'ACtrl', 'BCtrl' 
     } 
    } 
}); 

oder dass:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: 'ACtrl', 
      controller: 'BCtrl' 
     } 
    } 
}); 

es wird nicht funktionieren.

Ich weiß, es wäre eine Lösung, um den Inhalt der Controller zu einem zu machen, aber der Controller 'ACtrl' wird auch woanders verwendet, also müsste ich mich woanders wiederholen. Wie kann ich dieses Problem lösen ...

Antwort

15

Syntaxically, kann es nicht funktionieren. Diese (syntaxically) funktionieren könnte:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: ['ACtrl', 'BCtrl'] 
     } 
    } 
}); 

Aber AngularJS verwenden ZERO oder ONE Controller von DOMElement.

Sie CtrlA für Ihre A Ansicht zuweisen:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: 'ACtrl' 
     } 
    } 
}); 

Und dann in Ihre A Ansicht:

<div data-ng-controller="BCtrl"> 
    <!-- your view content --> 
</div> 

Das heißt, für die Code-Design Zweck ist der richtige Weg zu fusionieren die Aktionen Ihrer beiden Controller in nur einer, wenn sie dieselben Template-Elemente steuern müssen. Wenn sie verschiedene Teile der Vorlage steuern, verwenden Sie einen Controller für einen Teil, oder einen Controller für die gesamte Ansicht und einen anderen für das spezifische Teil:

+0

Okay, diese Erklärung hat mir sehr geholfen, ich würde es als endgültige Antwort akzeptieren. – burnaDLX

+0

Nun, um die Antwort zu akzeptieren, können Sie auf das "check" -Symbol auf der linken Seite meines Beitrags klicken, es wird zu grün übergehen die Antwort als akzeptiert markieren. Zusätzlich können Sie mit einem Klick auf den Pfeil neben dem Häkchen upvoten. –

+0

Okay, ich dachte, ich muss deinen Kommentar verbessern, damit der Pfeil grün wird (und mein Ruf ist zu gering, um das zu tun ...). – burnaDLX

9

Ihr Layout Split und nutzen so etwas wie:

.state('app.somestate', { 
      url : '/someurl', 
      views:{ 
       'menuContent': { 
        templateUrl: 'part1.html', 
        controller: 'ACtrl' 
       }, 
       'otherContent': { 
        templateUrl: 'part2.html', 
        controller: 'BCtrl' 
       }, 
       'someotherContent': { 
        templateUrl: 'part3.html', 
        controller: 'CCtrl' 
       } 
      } 
     }) 
+0

Es funktioniert gut mit verschiedenen HTML-Teile, thx! – burnaDLX

Verwandte Themen