You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
$modal.show({title: '演示 h 函数',content(h){returnh('div',{style: 'color:red;',onClick: ($event: Event)=>console.log('clicked',$event.target)},'hello world ~');}});
JSX
$modal.show({title: '演示 jsx 语法',content(){return(<divonClick={($event: Event)=>console.log('clicked',$event.target)}>
hello world ~
</div>);}});
一、组件设计
组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式
现在有一个场景,点击新增与编辑都弹框出来进行填写,功能上大同小异,可能只是标题内容或者是显示的主体内容稍微不同
这时候就没必要写两个组件,只需要根据传入的参数不同,组件显示不同内容即可
这样,下次开发相同界面程序时就可以写更少的代码,意义着更高的开发效率,更少的
Bug
和更少的程序体积二、需求分析
实现一个
Modal
组件,首先确定需要完成的内容:遮罩层
标题内容
主体内容
确定和取消按钮
主体内容需要灵活,所以可以是字符串,也可以是一段
html
代码特点是它们在当前
vue
实例之外独立存在,通常挂载于body
之上除了通过引入
import
的形式,我们还可通过API
的形式进行组件的调用还可以包括配置全局样式、国际化、与
typeScript
结合三、实现流程
首先看看大致流程:
目录结构
组件内容
实现 API 形式
事件处理
其他完善
目录结构
Modal
组件相关的目录结构因为 Modal 会被
app.use(Modal)
调用作为一个插件,所以都放在plugins
目录下组件内容
首先实现
modal.vue
的主体显示内容大致如下最外层上通过Vue3
Teleport
内置组件进行包裹,其相当于传送门,将里面的内容传送至body
之上并且从
DOM
结构上来看,把modal
该有的内容(遮罩层、标题、内容、底部按钮)都实现了关于主体内容
可以看到根据传入
content
的类型不同,对应显示不同得到内容最常见的则是通过调用字符串和默认插槽的形式
通过 API 形式调用
Modal
组件的时候,content
可以使用下面两种实现 API 形式
那么组件如何实现
API
形式调用Modal
组件呢?在
Vue2
中,我们可以借助Vue
实例以及Vue.extend
的方式获得组件实例,然后挂载到body
上虽然
Vue3
移除了Vue.extend
方法,但可以通过createVNode
实现在
Vue2
中,可以通过this
的形式调用全局 API而在 Vue3 的
setup
中已经没有this
概念了,需要调用app.config.globalProperties
挂载到全局事件处理
下面再看看看
Modal
组件内部是如何处理「确定」「取消」事件的,既然是Vue3
,当然采用Compositon API
形式在上面代码中,可以看得到除了使用传统
emit
的形式使父组件监听,还可通过_hub
属性中添加on-cancel
,on-confirm
方法实现在API
中进行监听下面再来目睹下
_hub
是如何实现其他完善
关于组件实现国际化、与
typsScript
结合,大家可以根据自身情况在此基础上进行更改参考文献
The text was updated successfully, but these errors were encountered: