跳到主要内容

Angularjs中Ui Bootstrap模态框总结

·1038 字·3 分钟

开发过程中使用AngularJs模态框的一些总结

只是为了说明ui-bootstrap模态框的用法,因此只显示主要的代码。

1.原生ui-bootstrap模态框的使用

主页面Html

<button class="btn btn-success" style="width: 100px" ng-click="modalTest()">测试模态框</button>

主页面js

.controller('MainCtrl', ['$scope', '$uibModal',
    function ($scope, $uibModal) {

        $scope.modalTest=function(){
            var modalInstance=$uibModal.open({
                templateUrl: 'modules/xxx/xxx/xxx/view/test.html',  //载入的html文件
                controller: 'ModalTestCtrl',  //为载入的文件定义一个控制器
                size: 'lg',  // size : lg sm 两值
                keyboard: false,//boolean默认值:true。当按下 escape 键时关闭模态框,设置为false 时则按键无效。
                backdrop : true,//boolean 或 string 'static'默认值:true。指定一个静态的背景或为false时,当用户点击模态框外部时不会关闭模态框。
                resolve: {   //resolve是成功创建模态框时,将有效数据传给模态框的控制器,模态框的控制通过注入的形式获取,这里传送了一个item的值;
                    item: function () {
                        // return $scope.item;
                        return '传值成功!';
                    }
                }
            });

            modalInstance.opened.then(function(){//模态窗口打开之后执行的函数,用的比较少,可以注掉
                console.log('modal is opened');
                alert('模态窗口打开之后执行的函数');
            });

            modalInstance.result.then(function (data) {  //配合模态框模块执行完毕,成功关闭后执行的回调函数。selected是模态框传过来的值。
                alert(data);//成功关闭后执行。$modalInstance.close('anarkh-lee');
            }, function () {
                alert('error');//取消关闭后执行。$modalInstance.dismiss('cancel'); 
            });
        }

}])

模态框Html

<div class="modal-header">
    <table style="width: 100%">
        <tr>
            <td align="left">
                <h4>模态框测试</h4>
            </td>
        </tr>
    </table>
</div>
<div class="panel panel-default">
    <div class="panel-body">
        <form name="queryForm" class="form-horizontal formCustomSetting normalForm">
            <h1>模态框</h1>
            <div class="form-group">
                <button class="btn btn-primary" type="button" ng-click="ok()">OK</button>
                <button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button>
            </div>
        </form>
    </div>
</div>

模态框js

.controller('ModalTestCtrl', ['$scope', '$modalInstance','item',
    function ($scope, $modalInstance,item) {
        var doInit = function() {
            alert(item);//接收参数
        };
        doInit();
        $scope.ok = function () {
            $modalInstance.close('anarkh-lee');  //close方法会将参数值回调返回。
        };
        $scope.cancel = function () {
            $modalInstance.dismiss('cancel');  //关闭模态框,也会执行回调。
        };
    }])

2.开发过程中用到的一种封装了一层的模态框的使用

这里只展示主页面js和模态框js

主页面js

$scope.openInstruction = function() {
    var modalDefault = {
        backdrop : true,
        keyboard : true,
        modalFade : true,
        size : 'lg',
        scope : $scope,
        controller : 'modalCtl',
        templateUrl : 'modules/xxxx/xxx/xxx/view/rcInstruction.html'
    };
    var modalOptions = {
        ywlb:'1',
        callBack : function() {//这里可以接参数
            //执行回调函数
        }
     };
     messageService.showModal(modalDefault, modalOptions);
};

模态框js

.controller('modalCtl', ['$scope', '$modalInstance', 'modalOptions','rcCommonService',
    function ($scope, $modalInstance, modalOptions,rcCommonService) {
		var doInit = function() {
        $scope.tfmsg = {};
        rcCommonService.queryIns({ywlb:modalOptions.ywlb}).$promise.then(function(data) {
            if(data.txsm != null){
                $scope.tfmsg.txsm = data.txsm;
            }
        	}, function(err) {
            	$scope.messageBox.showError(err.data.detail);
        	});
    	};
    	doInit();
		$scope.doClose = function() {
            $modalInstance.dismiss('cancel');
        };
    }])