Ich bin neu in eckigen, suchte nach einer guten Lösung für die unten, aber konnte keine gute Option finden.
Ich habe einen extrem modalen Dialog von ModalDialogCtrl
, der ein bearbeitetes Objekt wie Hase oder Hund oder Katze oder irgendetwas anderes enthält. Ich möchte die gleiche Funktionalität für jedes Objekt, das Speichern ermöglicht, wenn der Benutzer die Schaltfläche "Speichern" drückt. Das Viewmodell von Dialog verfügt über eine verschachtelte Ansicht für das zu bearbeitende Objekt, dessen Vorlagenname je nach Typ des bearbeiteten Objekts ersetzt wird. Diese spezifische Sicht enthält einen objektspezifischen Controller.Kommunikation zwischen verschachtelten Controllern
Modal Controller:
function ModalDialogCtrl($scope) {
// $scope.objectSpecificViewModelTemplate = "rabbit.html";
// or
// $scope.objectSpecificViewModelTemplate = "dog.html";
// etc
ctrl.save = function() {
// need to call inner object controller's save() method here
};
ctrl.cancel = function() {
// cancel editing
};
};
modales Dialogansicht:
<div class="modal-header">
<!-- Modal header -->
</div>
<div class="modal-body" id="modal-body">
<!-- Modal body containing object-specific view model -->
<div ng-include src="objectSpecificViewModelTemplate"></div>
</div>
<div class="modal-footer">
<!-- Modal buttons -->
<button class="btn btn-primary" type="button">OK</button>
<button class="btn btn-warning" type="button">Cancel</button>
</div>
Objektspezifische Ansicht Vorlagen:
<div ng-controller="RabbitCtrl">
<p>Weight: <input type="text" ng-model="rabbit.weight" /></p>
</div>
oder
<div ng-controller="DogCtrl">
<p>Color: <input type="text" ng-model="dog.color" /></p>
</div>
Objektspezifische Steuerungen:
function RabbitCtrl($scope) {
$scope.rabbit = { weight: 5}
$scope.save = function() { /* save to server */ };
}
function DogCtrl($scope) {
$scope.dog = { dog: "black"}
$scope.save = function() { /* save to server */ };
}
Was ich brauche, ist die innere Objekt save() Methode aufrufen, wenn der Benutzer Speichern Taste drückt. Und ich möchte, dass die modalen Controller und objektspezifischen Controller entkoppelt werden, da ich sie möglicherweise an verschiedenen Stellen der Anwendung wiederverwenden möchte. Also denke ich, dass meine Frage allgemein aussieht: wie man den Eltern-Controller veranlasst, bestimmte verschachtelte Controller-Methoden aufzurufen (es kann viele verschachtelte Controller geben) oder wie man den internen Controller dazu bringt, die Controller-Methode bestimmter Eltern aufzurufen?
wie es klingt sollte eine Direktive mit dynamischem Controller sein. [Dynamic Controller für Richtlinien] (http://StackOverflow.com/a/23647720/452708) – Abhijeet
@Abhijeet Ich möchte Controller nicht in Richtlinien verwandeln, nur um dieses Ziel zu erreichen. Es sollte einen anderen Weg geben :) Jetzt denke ich an Messaging über .emit() und .on() aber habe immer noch keine Lösung. – LINQ2Vodka