我使用controllerAs语法来避免控制器中的$ scope汤,并使用ui.bootstrap来呈现模态视图。
我需要打开一个与当前控制器共享相同范围的modalInstace。注入示波器时,您可能会执行以下操作:
var modalInstance = $uibModal.open({
templateUrl: 'addEditModal.html',
scope: $scope
});
但是,由于我没有注入作用域,并且使用的是controllerAs语法,因此无效。
根据我发现的情况,您需要使用resolve来传递数据,但您必须通过函数显式传递它。有没有办法通过整个范围?
我需要在该模态中执行一些操作,并且传递大量数据似乎有点过分。
不想这样做,因为它看起来很乱......
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
resolve: {
user: function() {
return vm.user;
},
something: function() {
return vm.something;
},
blah: function() {
return blah;
}
}
});
有更好的想法吗?
答案 0 :(得分:15)
我需要打开一个与其共享相同范围的modalInstace 电流控制器。
模态服务creates inherited scope。和
var modalInstance = $uibModal.open({
templateUrl: 'addEditModal.html',
scope: $scope
});
不注入范围,但为模态控制器指定父范围(否则根范围将用作父范围)。
由于在父控制器上使用了controllerAs,因此模态控制器可以访问其作用域上的继承vm
对象。
答案 1 :(得分:8)
不确定如果我理解正确,但我通过在resolve参数中传递/注入当前'controllerAs'来实现它
var modalInstance = $uibModal.open({
templateUrl: 'addEditModal.html',
controller: 'AudioItemAddEditCtrl as vm',
resolve: {
parent: function(){
return vm
}
}
});
然后,在AudioItemAddEditCtrl ...
中var AudioItemAddEditCtrl = function(parent, AudioItemService, $ModalInstance) {
...
}
然后我可以使用'parent'直接访问父控制器范围。
希望这有助于其他人。