使用 uibmodal 控制器绑定模板视图

Posted

技术标签:

【中文标题】使用 uibmodal 控制器绑定模板视图【英文标题】:binding template view with uibmodal controller 【发布时间】:2017-11-28 12:16:09 【问题描述】:

我在我的一个控制器中使用 uibmodal,并设法将数据传递给模态控制器。 但是,一旦数据在我的模态控制器中传递,我无法弄清楚如何在模态模板中呈现这些数据。

我的主控制器:

doEdit = function () 
        var modalScope = $scope.$new(false);
        modalScope.roleModel = self.gridApiRoles.selection.getSelectedRows()[0];

            var modalInstance = $uibModal.open(
                templateUrl: 'views/dialog.html',
                scope: modalScope,
                windowTemplateUrl: 'template/flexModal.html',
                backdrop: 'static',

                resolve: 
                    roleModelScope: function () 
                      return modalScope.roleModel;
                    
                ,

                controller: ['$scope', '$rootScope', 'roleModelScope', DialogEditController],
                controllerAs: 'ctrl'
            );

            modalScope.modalInstance = modalInstance;

            modalInstance.result.then(
                function close(result) 
                    console.info(result);
                ,
                function dismiss() 
                    console.info("dialog dismissed");
                
            );
        
    ;

我的 UibModal 控制器:

let DialogEditController = function ($scope, $rootScope, roleModelScope) 

  let self = this;

  self.$onInit = () => 
    initTest();
  ;

  let initTest = () => 
    console.log(roleModelScope.name);
  ;
;

至此,roleModelScope.name 已完美传递给模态控制器。

我的模板:

<div class="modal-dialog" style="width:900px; height:750">
  <div class="modal-content">

    <div class="modal-header bg-info">
    </div>

    <div class="modal-body">
        roleModelScope.name
    </div>

    <div class="modal-footer">
    </div>

  </div>
</div>

我尝试使用 ctrl.roleModelScope,但也没有用。

感谢您的回答。

【问题讨论】:

【参考方案1】:

在控制器this(context) 中分配一个roleModelScope 值,以便它可用于在视图上绑定。

此外,您的 Modal 控制器别名是 ctrl,尽管使用 roleModelScope.name,请使用 ctrl.roleModelScope.name

<div class="modal-body">
    ctrl.roleModelScope.name
</div>

代码

let initTest = () => 
    this.roleModelScope = roleModelScope;
    console.log(roleModelScope.name);
;

【讨论】:

好吧,roleModelScope 是控制器模态范围。我想我需要提一下。无论如何,我尝试了您的解决方案,但没有成功。我也试过 ctrl.roleModelScope.name 没有更多成功。 @Piotr___ 你看到控制台的价值了吗? @Piotr___ 请检查更新的答案..我的错..我错过了答案中的重要部分:( 你让我了解了更多关于“这个”的东西:-)。谢谢你。它几乎奏效了。我仍然不得不在 html 中提到 roleModelScope。就像这样: ctrl.roleModelScope.name;然后它就起作用了。 @Piotr___ 很高兴它有帮助,如果有帮助,请点赞。谢谢:)

以上是关于使用 uibmodal 控制器绑定模板视图的主要内容,如果未能解决你的问题,请参考以下文章

组件与模板 模板语法

AngularJs的UI组件ui-Bootstrap分享——Model

第二章:2.1 AngularJS 中的数据绑定

AngularJS $uibModal 不工作

在 emberjs 中重新渲染视图

使用合金加速器将模型绑定到控制器视图