1

我正在使用 angular ui bootstrap (ui.boostrap.modal) 处理模板。数据 {{property}} 是从 Ajax 请求创建的。

<!-- template for the modal  box-->
    <div><a data-toggle="modal" href="#{{property.domId()}}"
           class="btn btn-default">{{property.label}}</a></div>
        <div id="{{property.domId()}}"
             class="modal fade" role="dialog">
            <div class="modal-dialog">
                <div class="modal-content">
                <div class="modal-body">
                    <div class="row">
                        <div class="col-md-12 panel panel-info">

                            <div class="panel-heading">
                        <span tooltip-placement="bottom"
                              tooltip-html-unsafe="{{property.tooltip}}">
                              {{property.label}}</span>
                            </div>
                            <div class="panel-body">
                                <div ng-repeat="property in property.value">
                                        <div ng-include="property.templateUrl">
                                        </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
                </div>
            </div>
        </div>

模态窗口中的一些按钮会更新 $scope 中的模型等等。

问题是:从 ajax 承诺返回后,DOM 开始重建模态框。在某个时刻,在 $digest 的深处,它无法渲染一个元素并且模态窗口消失了。它只留下背景阴影(阻止我点击任何东西)。

 <div class="modal-backdrop fade in"></div>

在开发者工具中你可以看到整个 DOM 已经被 Angular 完全解析了。

4

1 回答 1

3

我会回答我自己的问题,因为它以后会有所帮助。实际上这不是 ui-bootstrap 使用 Bootstrap 3 CSS 的方式。HTML 代码与 AngularJS 一起使用,因为我仍在使用 bootstrap.js XD。模式由 Bootstrap3 显示...这是使用相同用例的方法。

JS 代码:创建一个 open() 函数来启动 Modal。应该提供一个模板和一个控制器。由于我的特定用例,我将 $scope 作为范围传递(不要在不了解范围的情况下按原样复制此代码)

    $scope.open = function () {
        var modalInstance = $modal.open({
            templateUrl: 'modalContent.html',
            controller: 'ModalInstanceController',
            scope: $scope
        });
    };

}]);

第二个控制器 ModalInstanceController 是模态框“内部”的那个。您应该注入范围和创建的模式。

testModule.controller('ModalInstanceController',
    ['$scope', '$modalInstance', function ($scope, $modalInstance) {

    $scope.close = function () {
        $modalInstance.close('close');
    };

    $scope.cancel = function () {
        $modalInstance.dismiss('cancel');
    };

在部分中,您可以使用text/ng-template. 模态在此脚本“内部”。最后一个按钮是使用主控制器的 open() 打开模式。在标准 BS3 中,您有一个针对 modal 的按钮id。这里需要调用 open() 方法。这是您必须在 HTML 中执行的主要解决方法。

<div>
    <script type="text/ng-template" id="modalContent.html">
        <div class="modal-header">{{property.label}}
        </div>
        <div class="modal-body">
            <div class="row">
                <div class="col-md-12 panel panel-info">

                    <div class="panel-heading">
                <span  tooltip-placement="bottom"
                      tooltip-html-unsafe="{{property.tooltip}}">
                      {{property.label}}</span>
                    </div>
                    <div class="panel-body">
                        <div ng-repeat="property in property.value">
                            <div ng-include="property.templateUrl">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="modal-footer">
            <button class="btn btn-primary" ng-click="close()">OK</button>
            <button class="btn btn-warning" ng-click="cancel()">Cancel</button>
        </div>
    </script>

    <button class="btn btn-default" ng-click="open()">Open</button>
</div>
于 2013-10-03T09:51:44.087 回答