我是新來的角,搜索下面的一個很好的解決方案,但沒有找到一個好的選擇。
我有一個極其s mod的模式對話框,由ModalDialogCtrl
控制,其中包含一個編輯的對象,如兔或狗或貓或其他任何東西。我希望在用戶按下「保存」按鈕時允許保存任何對象的相同功能。 Dialog的viewmodel有一個嵌套視圖,用於編輯對象,其模板名稱將根據編輯對象的類型進行替換。這個特定的視圖包含對象特定的控制器。嵌套控制器之間的通信
模態控制器:
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
};
};
模式對話框視圖:
<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>
特定於對象的視圖模板:
<div ng-controller="RabbitCtrl">
<p>Weight: <input type="text" ng-model="rabbit.weight" /></p>
</div>
或
<div ng-controller="DogCtrl">
<p>Color: <input type="text" ng-model="dog.color" /></p>
</div>
特定對象控制器:
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 */ };
}
我需要的是,當用戶按下保存按鈕來調用內部對象的save()方法。我希望模態控制器和對象特定的控制器解耦,因爲我可能希望在應用程序的不同位置重用它們。所以我認爲一般我的問題是這樣的:如何讓父控制器調用特定的嵌套控制器方法(可以有很多嵌套的控制器)或如何讓內部控制器調用特定的父控制器方法?
聽起來像應該是動態控制器的指令。 [動態控制器的指令](http://stackoverflow.com/a/23647720/452708) – Abhijeet
@Abhijeet我不希望把控制器變成指令只是爲了實現這個目標。應該有一種不同的方式:)現在我正在考慮通過.emit()和.on()進行消息傳遞,但仍然沒有錯誤的解決方案。 – LINQ2Vodka