如何给element添加一个抽屉组件的方法步骤
前端  /  管理员 发布于 4年前   670
近来因为业务需要,对比iview和element库,发现element确实要比实习期间使用的iview强大点,尤其文档更为友好,但是iview的组件功能更多一点,比如分割线和抽屉组件
今天特意手写一个抽屉组件,方便自己使用element库,写好的组件我已经放在我的githup了, 点这里
一、实践
1.分析
一个抽屉组件的z-index必定是在当前页面之上的,在抽屉主体之外的区域还会有一层半透明的遮罩层,知道这些就很容易了
// drawer.vue现在已经是我们想要的样子了,接下来是给drawer_body添加样式
作为一个灵活的组件库,我们希望样式是可以随时定制的,所以,接下要添加的样式都 使用props
动态绑定的
参考iview的样式,除了抽屉的宽度,还需要设置抽屉的方向,当我们需要抽屉时让它显示出来,不需要时隐藏它,或者为了更加显眼,甚至给抽屉更换背景色......,这些都是可以实现的,看下面的代码
对于宽度和背景色,你还需要额外的处理下
drawer你只需在使用的地方引入组件,然后提供你想修改的props值
//index.vue ...显示抽屉 2.关闭抽屉
在点击遮罩层的时候,我们希望可以关闭已经打开的抽屉组件,这里如果你直接修改父组件传过来的drawerVisible值,会报错如下
vue.esm.js:629 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten
whenever the parent component re-renders. Instead, use a data or computed property based on the
prop's value. Prop being mutated: "drawerVisible"这是因为vue是单向数据流的,如果想改变父元素的值,必须使用监听事件的方式,但是2.3.0之后添加了.sync修饰符,所以,正确的做法是使用.sync修饰符
... ...methods: { close() { this.$emit("update:drawerVisible", false); }}另外,我们还希望在关闭抽屉组件时,我们可以监听到这个事件然后做出反应
methods: { close() { this.$emit("update:drawerVisible", false); this.$emit("close"); }}此时需要在抽屉组件上添加
methods:{ close(){ // 关闭抽屉组件时你要做的事 }} 2.动画
动画是UI的灵魂,所以接下来给抽屉组件的显示和隐藏添加动画,我们使用transition的css动画做动画过度效果
//drawer.vue drawer虽然现在已经完全实现了抽屉的功能,但是本着更加精美的原则,我还打算使用slot给它添加辩题和页脚
3.添加标题
标题solt的name值是header
添加标题的目的是为了让抽屉组件看起来更加清楚,此外,除了添加标题,我还想添加个关闭按钮
// 需要添加几个props属性你可以选择是否添加标题,是否添加关闭按钮,值的注意的是如果添加了关闭按钮,点击遮罩层就不会自动关闭抽屉组件了
{{title}}我是这么做到禁用遮罩层点击事件的
当然这些你可以使用具名插槽自定义的
这里是自定义标题4.添加页脚
页脚solt的name值是footer
为了使得页脚和标题有一定的距离,我给主体内容添加了最小高度
方法是很类似的,只是我多添加了两个监听事件,确定和取消
//drawer.vueCopyright·© 2019 侯体宗版权所有· 粤ICP备20027696号