我正在使用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>
在开发者工具中,您可以看到Angular已经完全解析了整体DOM。
答案 0 :(得分: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');
};
在partial中,您可以使用text/ng-template
创建内嵌模板。模态是“内部”这个脚本。
最后一个按钮是使用主控制器的open()打开模态。在标准BS3中,您有一个定位模式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>