1、常用的引用组件方式
例子链接
1 2 3
| <div> <ButtonCounter /> </div>
|
1 2 3 4 5 6 7
| import ButtonCounter from "./ButtonCounter.vue"
export default { components: { ButtonCounter } }
|
2、考虑如下场景
例子链接
1 2 3 4
| <div> <button @click="CreateButtomCounter">点击加载组件</button> <div id="root"></div> </div>
|
1 2 3 4 5 6 7
| import { CreateButtomCounter } from "./CreateButtomCounter.js"
export default { methods: { CreateButtomCounter } }
|
CreateButtomCounter.js
1 2 3 4 5 6 7 8 9 10
| import Vue from "vue" import ButtonCounter from "./ButtonCounter.vue"
export const CreateButtomCounter = () => { const ButtonCounterCom = Vue.extend(ButtonCounter) const instance = new ButtonCounterCom().$mount()
const dom = document.querySelector("#root") dom.appendChild(instance.$el) }
|
3、Vue.extend()
官方文档

特点:只能通过自身初始化结构
使用范围:
(1)挂载在某元素下
(2)被vue实例的components引用
(3)Vue.component组件引用
4、Vue.component()
官方文档

特点:
(1)可通过自身初始化组件结构
(2)可通过引入vue.extend初始化组件结构
(3)可通过第三方模版temple.html初始化组件结构
使用范围: 任何已被vue初始化的元素内 官方文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <script>
Vue.component('templecomponent', function(resolve, reject) { $.get("./../xtemplate/com.html").then(function(res) { resolve({ template: res, props: ["b"], data: function() { return { a: "a" } } }) }) }) </script>
|
5、new Vue
特点:
(1)可以通过自身components引用vue.extend构造,通过自身data向构造传参
(2)可以通过自身component引用组件模版,通过自身data向组件传参
使用范围:
(1)仅限于自身
1 2 3 4
| <div id="app1"> <dt1></dt1> <vueapple v-bind:b="msg"></vueapple> </div>
|
1 2 3
| <script type="text/x-template" id="dt1"> <div>这里是子组件1</div> </script>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <script> new Vue({ el: "#app1", data: { msg: "vue实例参数" }, components: { dt1: { template: "#dt1" }, vueapple: Profile } }); </script>
|
6、Vue.component() 与 Vue.extend() 关系
调用 Vue.component 时
1、调用 Vue.extend,即使用基础 Vue 构造器,创建一个“子类”。
2、注册全局组件 官方文档
如果是 new Vue 之后调用 Vue.component 呢?
以下代码等价
1 2 3 4 5 6 7
| export const CreateButtomCounter = () => { const ButtonCounterCom = Vue.component('button-counter', ButtonCounter) const instance = new ButtonCounterCom().$mount()
const dom = document.querySelector("#root") dom.appendChild(instance.$el) }
|
1 2 3 4 5 6 7
| export const CreateButtomCounter = () => { const ButtonCounterCom = Vue.extend(ButtonCounter) const instance = new ButtonCounterCom().$mount()
const dom = document.querySelector("#root") dom.appendChild(instance.$el) }
|
7、常用的引用组件方式 与 Vue.extend() 的关系
8、$mount()
$mount 方法支持传入 2 个参数,第一个是 el,它表示挂载的元素,可以是字符串,也可以是 DOM 对象,如果是字符串在浏览器环境下会调用 query 方法转换成 DOM 对象的。第二个参数是和服务端渲染相关,在浏览器环境下不需要传第二个参数。
1 2 3 4
| const instance = new ButtonCounterCom().$mount()
const dom = document.querySelector("#root") dom.appendChild(instance.$el)
|
$mount()不带参数,会把组件在内存中渲染完毕
instance.$el 拿到的就是组件对应的dom元素,可以直接操作dom
9、经典案例
Vue.extend + $mount
Dialog