我是新来的角,搜索下面的一个很好的解决方案,但没有找到一个好的选择。
我有一个极其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