layer 的提示框和弹层确实也好用,在使用angular的前提下,使用layer遇到诸多麻烦,记录下来。

在类型是1页面层,主要问题在遮罩方面,造成无法编辑。

开始:引入layer 样式,angular集成layer.js的依赖项设定,用require解决。

由于layer弹层的z-index 只默认是很大19891014,bootstrap的z-index设定1030,autocomplete的z-index是99999,这就造成弹层无法编辑。

首先解决这个问题之前,大家可能遇到的问题是 layer对象是undefined,虽然已经引入了。

我遇到的是定义require模块时,没按输出顺序写对,正确的最好把有输出对象的放在前面,用于注入接收参数。如下:

define(['app', 'laydate', 'layer', 'autoSvc', 'datefmt'], function (app, laydate, layer) {});

没有输出的放在后面,只用来异步加载js文件。

其次,在解决弹层不能编辑的问题。由于主要使用angular,所以尽量少用jquery的方式做事。

最开始无法解决,想到最笨的方法是弹层参数: content: $('#lay').html() ,但是强度依赖jquery操作界面数据,不符合预期。

期望拿到原来对象,而不是拷贝,不要再html()了。

最后解决还是得依靠浏览器的调试工具,发现运行时界面元素遮罩层的z-index只要大于1030就无法编辑,这个就是bootstrap 3.3.7里面默认设定的。

于是修改layer弹层的初始zIndex值,只要小于1030就可以编辑,但是界面其他表单也可以编辑,不是预期的。

那就在界面加个遮罩层: #cover{display: none;top:0;left: 0;height: 100%;width: 100%; position: fixed; z-index: 1; background-color: rgb(0, 0, 0); opacity: 0.3;}

假如不修改bootstrap的z-index值,layer open时若设定为zIndex=1000,则只能弹出30次,因为layer弹层每次z-index值都会+1,坑啊。

起初的想法是修改bootstrap的z-index为无穷大,然后不再设定layer的zIndex参数,测试后可行。

问题又来了,autocomplete的z-index = 99999,layer的初始值就比它大,继续填坑。

那就把bootstrap 设定 和autocomplete一样值 = 99999,测试后autocomplete和laydate没问题,接下来就是layer弹层。

自写的遮罩层还是要的,layer初始zIndex = 2,大约不关闭浏览器情况下,弹出10万次失效,毕竟是单页面。

估计很少不关闭浏览器情况下,运行这么长时间和次数,算是angular 和 layer 集成了吧。

以下是主要代码:css

    <link href="static/bootstrap-3.3.7-dist/css/bootstrap.css" rel="stylesheet"/>
<link href="static/layer/theme/default/layer.css" rel="stylesheet"/>
require.config 配置路径:
        'jquery': 'static/jquery-1.11.3/jquery.min',
'jqueryMig': 'static/jquery-migrate-1.4.1.min',
'autocomplete': 'static/jquery-autocomplete/jquery.autocomplete.min',
'bootstrap': 'static/bootstrap-3.3.7-dist/js/bootstrap.min',
'angular': 'node_modules/angular/angular.min',
'ui-router': 'node_modules/angular-ui-router/release/angular-ui-router.min',
'laydate': 'static/laydate/laydate',
'layer': 'static/layer/layer'

bootstrap.css 修改部分:

.navbar-fixed-top {
top:;
z-index:;
}

自加遮罩层样式:

/*  遮罩层 */
#cover{display: none;top:;left:;height: 100%;width: 100%; position: fixed; z-index:; background-color: rgb(0, 0, 0); opacity: 0.3;}

弹层测试html:

<!-- 测试弹出层 -->
<div id="cover"></div>
<div id="lay" style="display: none;">
<div style="padding: 20px;">
<input type="text" ng-model="ui.usr_label" class="form-control">
</div>
</div>

弹层测试js:

            $('#cover').css('display','block');
layer.open({
content: $('#lay'),
type: 1,
area: ['600px', '400px'],
closeBtn: 2,
title: false,
zIndex: 2,
cancel: function (index, layero) {
$('#cover').css('display','none');
}
});

========================2018.11.03 以下

关于layer封装的几个方法:

 define(['app','layer'], function (app, layer) {
app.svc('layerSvc', function () {
return {
pageIndex: 0,
loadIndex: 0,
loadTimer: 0,
open: function (id, ex) {
$('#cover').css('display','block');
var def = {
content: $(id),
type: 1,
//area: ['600px', '400px'],
closeBtn: 2,
title: false,
zIndex: 2,
cancel: function (index, layero) {
$('#cover').css('display','none');
}
};
if (ex) Object.assign(def, ex);
this.pageIndex = layer.open(def);
},
load: function (timeout, fun) {
var idx = layer.load(0, {shade:0.3});
this.loadIndex = idx;
var t = setTimeout(function () {
layer.closeAll();
layer.alert('对不起,加载已超时!', {icon: 5,title: '错误'});
}, timeout);
this.loadTimer = t;
fun(t, idx);
},
error:function (msg) {
layer.alert(msg, {icon: 5,title: '错误'});
},
confirm:function (msg, fun) {
layer.confirm(msg, {icon: 3, title:'确认'}, function (index) {
layer.close(index);
fun();
});
},
closePage: function () {
$('#cover').css('display','none');
layer.close(this.pageIndex);
},
closeLoad: function () {
clearTimeout(this.loadTimer);
layer.close(this.loadIndex);
}
}
})
});

方法open和closePage是成对的,在open的page上确定时调用closePage方法,来关闭弹层。

例如: layerSvc.open('#divAddRole', {area: ['350px', '200px'], title:'添加角色'});

在保存时关闭弹层:

             $http.post('/SvcWms/AddRole', data).then(function (value) {
layerSvc.closePage();
layer.msg('保存成功');
$scope.getRoles();
})

另外一个加载等待层,超时时间设定为5秒,调用:

         /* 获取全部角色 */
$scope.getRoles = function () {
layerSvc.load(5000, function () {
$http.get('/SvcWms/GetAllRoles').then(function (resp) {
layerSvc.closeLoad();
$scope.roles = resp.data.Data;
})
})
};

为了截图故意把后台服务关闭,正常闪过还是能看到。若超时就提示:

角色权限管理的界面:

angular 与 layer 集成过程的更多相关文章

  1. 个人从源码理解JIT模式下angular编译AppModule的过程

    承接上文.笔者之前将一个angular项目的启动过程分为了两步: 创建平台得到 PlatformRef ,以及执行平台引用提供的方法编译根模块 AppModule .本文就将着眼于创建好的平台,从an ...

  2. CMMI三个过程域的流程及达到特定目标、共性目标的要求(RD需求管理过程,PI产品集成过程,TS技术解决方案)

    RD需求管理过程 通过面谈的方式获取相关干系人关于产品生命周期各阶段的需求.期望,限制条件,接口 将相关干系人的需求.期望,限制条件,接口转化成用户需求说明书 依据客户需求,确定产品或产品组件需求,形 ...

  3. 驰骋工作流引擎-CCMobile与安卓、IOS集成过程中的问题与解决方案

    CCMobile与安卓.IOS集成过程中的问题与解决方案 前言: CCMobile(2019版本)是CCFlow&JFlow 的一款移动端审批的产品.系统基于mui框架开发,是一款可以兼容An ...

  4. 前端架构:Angular与requirejs集成实践

    这几天angular与requirejs.browserify的集成弄的博主头好晕,今天终于成功集成了requirejs,现写些心得体会在这里. 核心思想:angular加载时有一定的顺序,必须依次加 ...

  5. 使用beanstalkd实现定制化持续集成过程中pipeline

    持续集成是一种项目管理和流程模型,依赖于团队中各个角色的配合.各个角色的意识和配合不是一朝一夕能练就的,我们的工作只是提供一种方案和能力,这就是持续集成能力的服务化.而在做持续集成能力服务化的过程中, ...

  6. ABP .Net Core API和Angular前端APP集成部署

    前言:在ABP官网(https://aspnetboilerplate.com)生成的.Net Core + Angular项目前后端是两个独立的项目,我们可以分开部署,也可以将前端和Web API一 ...

  7. 3D Touch集成过程整理

    1.集成App图标按压快速打开某个功能 在AppDelegate.m中加入以下三个东西 在启动方法里加入3D Touch菜单 - (BOOL)application:(UIApplication *) ...

  8. cocos2dx-jsb 跨语言调用及第三方集成 - 过程记录

    1:C++中调用js方法: 问题:ios中当用户通过home键将游戏转入后台时,调用js中的暂停游戏方法: AppDelegate::applicationDidEnterBackground() 和 ...

  9. Android 友盟分享详细集成过程及所遇问题解决

    最近项目需要针对微信.朋友圈.QQ.QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并 ...

随机推荐

  1. Spring Boot - 依赖注入

    @Autowired 查找被注解的变量类型,找到所有此类型的构建或此类型子类的构建 如果一个也没有找到,看required参数,false则用null,true则失败(默认,即spring会启动失败) ...

  2. GridView中文属性

    GridControl的中文属性: 1  Appearance 外观 Appearance 外观设置 ColumnFilterButton  行过滤器按钮 BackerColor  背景色 Backe ...

  3. sqlite初识

    最近在部署PHP网站项目的时候,发现项目并没有使用传统的三大关系型数据库,而是采用了sqlite数据库,以前的时候,也见过sqlite,但是并没有深入了解其功能和用法,好奇心驱使,决定好好研究一下sq ...

  4. centos7 minimal 安装 &网络配置

    1.下载centos7manimal.iso  下载地址: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Min ...

  5. Delphi XE8帮助中的REST相关内容。

    Delphi XE8的离线帮助是我见过的最好的Delphi帮助文档了,内容相当详细和丰富,几乎涵盖了Delphi的方方面面!! Delphi XE8的帮助文档在哪里?“XE8安装目录\Help\Doc ...

  6. IO模型《三》非阻塞IO

    非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图 ...

  7. 多张表进行关联查询---->删除某个数据的时候出现还有子记录的提示

    多张表进行关联查询的时候,当某张表里面的一个字段在另外一张表有定义,就相当于一张表是另外一张表的子表:比如现在开发所遇到的一个问题: 这个是在删除sys_user表的里面的数据的时候出现的问题,因为s ...

  8. PL/SQL那点事-->SqlSession operation; SQL []; ORA-01722: 无效数字

    PL/SQL那点事-->SqlSession operation;SQL []; ORA-01722: 无效数字 出现这种情况,在网上查了很多方法:大致主要有两种方法帮助我们解决这个问题: 1. ...

  9. TCP 的保活定时器

    引言 可以没有任何数据流过一个空闲的 TCP 连接. 这意味着我们可以启动一个客户与服务器建 立一个连接,然后离去数小时.数天.数个星期或者数月,而连接依然保持.中间路由器可以崩溃和重启,电话线可以被 ...

  10. leetcode-819-Most Common Word(词频统计)

    题目描述: Given a paragraph and a list of banned words, return the most frequent word that is not in the ...