目前流行的弹窗,不管是
<dialog visible="visible">
<user-dialog />
</dialog>
还是
<template>
<dialog visible="visible"></dialog>
</template>
<script>
visible = false
open(){
this.visible = true
}
close(){
this.visible = true
}
</script>
都难受至极。
<dialog ref="dialog1" :visible="dialog1" />
<dialog ref="dialog2" :visible="dialog2" />
<dialog ref="dialog3" :visible="dialog3" />
<dialog ref="dialog4" :visible="dialog4" />
......
data(){
return {
dialog1: false,
dialog2: false,
dialog3: false,
......
}
}
<dialog @close="close" />
<dialog :visible.sync="visible">
<user-dialog @close="close" />
</dialog>
data(){
return {
visible: true
}
}
close(event){
console.log(event)
this.visible = false
}
一旦引入组件,组件便开始 mount 了,生命周期也执行了,如果调用者引入了 N 个 dialog ,那性能可想而知,还不如第一种写法
因失去了生命周期的特性,导致关闭弹窗的时候需要你自己重置数据,做清理
而且你开不能利用生命周期来做数据加载,因为你还没打开弹窗,90%的业务场景是没必要加载数据的,所以你还要在 open 里自己加载
还有一些问题我暂时想不起来,先略吧
忍了好久了,终于把 https://material.angular.io/components/dialog/overview 的 dialog 给挪过来了,所说不太完美,但是至少满足我的痛点了。
使用文档可以看我写的demo,API 参考的话可以看Dialog | Angular Material
各位如果也有同样的痛苦的话,可以 fork 到自己项目里去改一下就可以用了。
写得不是很完美,仅作为一个想法、思路。
ps:真的想吐槽手动初始化 Vue 这个过程,难受至极,离开了文档的操作,啥也不是。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.