![npm](https://img.shields.io/npm/l/vue-layer.svg)
vue-layer
install
npm install vue-layer
// "eslint:recommended"
Quick Start
在程序入口添加
import Vue from 'vue';
import layer from 'vue-layer'
import 'vue-layer/lib/vue-layer.css';
Vue.prototype.$layer = layer(Vue);
全局参数重置
import Vue from 'vue';
import layer from 'vue-layer'
Vue.prototype.$layer = layer({
msgtime: 3,
});
调用
this.$layer.alert("找不到对象!");
Attribut
{
type: 0,
title: '信息',
content: '',
area: 'auto',
offset: 'auto',
icon: -1,
btn: '确定',
time: 0,
shade: true,
yes: '',
cancel: '',
tips: [0,{}],
tipsMore: false,
shadeClose: true,
maxmin: true,
scrollbar: true,
resize: false
}
Method
layer.alert(content, [options, yes]);
(layerid)=>{
this.$layer.close(layerid);
}
layer.confirm(content, [options, yes, cancel]);
(layerid)=>{
this.$layer.close(layerid);
}
layer.loadding(option);
layer.msg(content, [options, end]);
layer.prompt(options, yes);
layer.tips(content, follow, options);
layer.iframe({
content: {
content: componentName,
parent: this,
data:{}
},
area:['800px','600px'],
title: 'title',
cancel:()=>{
alert('关闭iframe');
}
});
layer.close(id);
layer.closeAll(type);
layer.full(layerid);
layer.min(layerid);
layer.restore(layerid);
关于this.$layer.iframe
其实使用iframe层,除了操作方便外,主要的目的是隔离代码, 降低代码复杂度。而在vue中,组件就是功能块的基本单位了,所以vue-layer中并不存在iframe的DOM元素,这里用的都是组件。 这里的content有三个参数:
content:
此参数为组件对象, 比如
import editFrom from './edir-form.vue';
此处content就为editFrom即可。
parent:
此参数其实就是当前调用layer的vue对象, 即this即可。在editForm中可以直接使用, this.$parent来获取调用layer的vue对象,然后父子传值神马的,就很easy,当然也可以直接使用vuex,就不用this.$parent了,另外自动注入了原始数据的浅拷贝lydata,也可以直接赋值这个数据来同步父对象的数据
data:
此参数可认为是editForm的props,传递到iframe后是这个数据的深拷贝,改变数据不会影响来源数据,然后你懂得。
- 该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
- 该方法会自动添加一个key为lydata的值, 该值为data的浅拷贝, 当iframe要更改父窗口传递的数据的时候,可以直接使用lydata来修改,对于表单使用非常方便
结果即为:
methods:{
eidt() {
this.$layer.iframe({
content: {
content: editForm,
parent: this,
data:{
info:{a:1}
}
},
area:['800px','600px'],
title:"editForm"
});
}
}
iframe组件中
export default {
data() {
return {
form: {
}
};
},
props: {
info: {
type: Object,
default: () => {
return {};
}
},
layerid: {
type: String,
default: ""
},
lydata: {
type: Object,
default: () => {
return {};
}
},
lyoption: {
type: Object,
default: () => {
return {};
}
}
},
methods: {
onSubmit() {
this.$layer.msg("提交成功", () => {
this.lydata.info.name = this.form.name;
this.$layer.close(this.layerid);
});
},
cancel() {
this.$layer.close(this.layerid);
}
},
mounted() {
this.form = this.info
}
};
样式调整
该包的css都为vl-notice开头, 需要重写css样式,覆盖即可
觉的作者付出的时间和精力有价值,就给作者买杯咖啡吧
入群交流
更新日志
更新日志