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
// form [email protected]exportfunctionmountComponent(RootComponent,props={}){varapp=createApp(RootComponent,props);varroot=document.createElement('div');document.body.appendChild(root);return{instance: app.mount(root),unmount(){app.unmount();document.body.removeChild(root);}};}
函数调用
Dialog 是一个函数,调用后会直接在页面中弹出相应的模态框。
使用场景
window.alert()
的提示框组件,它的位置是在<body>
下,而非<div id="app">
,并且不会通过常规的组件自定义标签的形式使用,而是像 JS 调用函数一样使用。从熟悉 Vue 的构造器——extend 与手动挂载——$mount 开始
创建一个 Vue 实例时,都会有一个选项
el
,来指定实例的根节点,如果不写el
选项,那组件就处于未挂载状态。Vue.extend
的作用,就是基于 Vue 构造器,创建一个“子类”,它的参数跟new Vue
的基本一样,但data
要跟组件一样,是个函数,再配合$mount
,就可以让组件渲染,并且挂载到任意指定的节点上,比如 body。比如上文的场景,就可以这样写:
这一步,我们创建了一个构造器,这个过程就可以解决异步获取 template 模板的问题,下面要手动渲染组件,并把它挂载到 body 下:
这一步,我们调用了
$mount
方法对组件进行了手动渲染,但它仅仅是被渲染好了,并没有挂载到节点上,也就显示不了组件。此时的component
已经是一个标准的 Vue 组件实例,因此它的$el
属性也可以被访问:当然,除了 body,你还可以挂载到其它节点上。
$mount
也有一些快捷的挂载方式,以下两种都是可以的:实现同样的效果,除了用 extend 外,也可以直接创建 Vue 实例,并且用一个 Render 函数来渲染一个 .vue 文件:
这样既可以使用 .vue 来写复杂的组件(毕竟在 template 里堆字符串很痛苦),还可以根据需要传入适当的 props。渲染后,如果想操作 Render 的
Notification
实例,也是很简单的:因为 Instance 下只 Render 了 Notification 一个子组件,所以可以用
$children[0]
访问到。需要注意的是,我们是用
$mount
手动渲染的组件,如果要销毁,也要用$destroy
来手动销毁实例,必要时,也可以用removeChild
把节点从 DOM 中移除。来个例子
支持 Vue2
支持 Vue3
其他
The text was updated successfully, but these errors were encountered: