将父控制器传递给模态(Angular-ui bootstrap)

时间:2015-05-27 22:06:15

标签: angularjs twitter-bootstrap angular-ui

我觉得这应该有效,但事实并非如此。我想能够通过打开模态的控制器,所以我可以使用它的提交功能等。我使用的是控件模式(所以不使用$ 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>

该按钮不执行任何操作,但应该打印警告。任何想法都赞赏。感谢。

1 个答案:

答案 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>