在以往的angular文件中,打开页面弹窗逻辑,在父页面一并开发,可视性差,综上查询资料,单独开发弹窗页面,实现模块化。
$scope.opendDialog = function() {
$uibModal.open({
animation: false,
backdrop: 'static', // 用于指定是否显示背景遮罩层。可以是 `true`(默认)、`false` 或 `'static'`(点击遮罩层不会关闭模态窗口)
keyboard: false, // 用于指定是否允许通过按Esc键关闭模态窗口。默认为 `true`。
templateUrl: '../recruitment/modal/unusedDialog.html', // 用于指定模态窗口的HTML模板
size: 'sm', // 用于指定模态窗口的大小。
resolve: { // 属性值为一个函数,该函数返回一个promise
parentScope: function(){ return $scope; }},
controller: function($scope, parentScope){ // 用于指定模态窗口的控制器
//弹窗变量定义了
//弹窗查询接口逻辑...
//弹窗提交接口逻辑...
//弹窗关闭事件了....
}
});
}
弹窗结构
baseInfo.ctrl.js、 baseInfo.html
1、现父页面只需开发实现以下代码配置,更简洁易懂
$scope.comparison = function (item) {
$scope.currentItem = item, //这块是把父组件的数据传过去,子组件通过注入parentScope父组件的数据,比如查询条件
$uibModal.open({
animation: false,
backdrop: 'static',
keyboard: false,
windowClass: 'custom-modal-window',
templateUrl: '../view-pop/basicInfo.html',
resolve: {
loadScript: loadScript(['../view-pop/basicInfo.ctrl.js']),
// **关键点**:注入父组件作用域
//这块是把父组件的数据传过去,子组件通过注入parentScope父组件的数据,比如查询条件
parentScope: function () { return $scope; }
//只传递需要的数据
itemData: function() { return angular.copy(item); },
queryParams: function() { return $scope.queryParams; }
},
controller: 'basicInfo-Ctrl', //这块控制器是单独的一个js文件、
})
}
$scope.callback = function () {
$uibModalInstance.dismiss();
}
2、主要涉及到配置打开的页面路径、以及对应的控制器、弹窗关闭事件的回调
app.controllerProvider.register('basicInfo-Ctrl', ['$scope', '$rootScope', 'parentScope',
function ($scope, $rootScope, parentScope,) {
$scope.currentItem = parentScope.currentItem
}
}
优点:
- 之前定义的弹窗,无法自定义弹窗大小,只能通过size参数调整, 现可通过在baseInfo页面自定义style样式;
- 现可在父页面调用统一公共接口,避免每次弹窗打开在调用,造成性能消耗;
- 弹窗可复用,通过父页面参数传递,减少冗余代码量。