我觉得这应该有效,但事实并非如此。我想能够通过打开模态的控制器,所以我可以使用它的提交功能等。我使用的是控件模式(所以不使用$ scope)。
var _this = this;
this.openModal = function(modalId,dataIn){
this.modalInstance = $modal.open({
templateUrl: modalId,
controller: 'ModalCtrl',
controllerAs: 'modal',
resolve: {
modalObject: function(){
return dataIn;
},
title: function(){
return 'Training Info';
},
parent: function(){
return _this
}
}
});
_this.modalInstance.result.then(function (data) {
$log.log('submitting data for '+_this.doctorId);
experienceFactory.submitTraining(data).then(function(){
loadExperience();
},function(error){
console.log(error);
});
}, function () {
//something on close
$log.info('Modal dismissed at: ' + new Date());
});
};
this.something = function(){
$log.warn('omg it workt?');
};
这是用简单的aCtrl.openModal('a-modal',aCtrl.data)
打开的,但由于某种原因我无法访问parent
控制器
<script type="text/ng-template" id="a-modal">
<div class="modal-header">
<h3 class="modal-title">{{modal.title}}</h3>
</div>
<div class="modal-body">
<button ng-click="parent.something()">Something</button>
</div>
</script>
该按钮不执行任何操作,但应该打印警告。任何想法都赞赏。感谢。
答案 0 :(得分:1)
不幸的是,你没有包含控制器的代码,但我认为你误解了如何为模态控制器提供依赖关系。
resolve
部分为控制器提供依赖关系,它既不将它们绑定到范围也不绑定到控制器。看一下UI-Bootstrap的Modal示例的这个JS部分:
.controller('ModalInstanceCtrl', function ($scope, $modalInstance, items) {
$scope.items = items;
在你的情况下它应该是
.controller('ModalCtrl', ['parent', function (parent) {
this.parent = parent;
在HTML中,如果您使用的是controllerAs模式:
<button ng-click="modal.parent.something()">Something</button>