前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue

vue构造、vue组件和vue实例这三个是不同的概念,它们的关系有点类似于Java的继承概念:

关系:vue构造->vue组件->vue实例

也就是说不同的vue组件可以共用同一个vue构造,不同的vue实例可以共用同一个vue组件。在大型项目中,用过java开发的都知道,继承是非常重要的,前端也一样。我们先看看他们之间的实现代码区别

<script>
//vue构造
Vue.extend({
props: [],
data: function() {
return {}
},
template: "" }); //vue组件
Vue.component("mycomponent", {
props: [],
data: function() {
return {}
},
template: ""
}); //vue实例
new Vue({
el: "",
data: {}
});
</script>

  

从上面的代码可以看出,vue构造和vue组件所需的部分初始化结构参数是一样的,这意味着vue实例可以直接跳过vue组件直接使用vue构造对自身组件初始化,也就是vue构造->vue实例,下面是三种API的区别:

vue.extend

特点:

1.只能通过自身初始化结构

使用范围:

1.挂载在某元素下

2.被Vue实例的components引用

3.Vue.component组件引用

<div id="app2"></div>
<script>
var apple = Vue.extend({
template: "<p>我是构造函数创建:自身参数:{{a}}|外部传参:{{b}}</p>",
data: function() {
return {
a: "a"
}
},
props: ["b"]
}); //挂载构造函数
new apple({
propsData: {
b: 'Vue.extend'
}
}).$mount('#app2');
</script>

  

运行结果:

我是构造函数创建:自身参数:a|外部传参:Vue.extend。

  

Vue.component

特点:

1.可通过自身初始化组件结构

2.可通过引入Vue.extend初始化组件结构

3.可通过第三方模板temple.html初始化组件结构

使用范围:

任何已被vue初始化过的元素内

<div id="app3">
<applecomponent v-bind:b="vparam"></applecomponent>
<mycomponent v-bind:b="vparam"></mycomponent>
<templecomponent v-bind:b="vparam"></templecomponent>
</div> <script>
//方法1 【引入构造】
Vue.component('applecomponent', apple);
//方法2 【自身创建】
Vue.component("mycomponent", {
props: ["b"],
data: function() {
return {
a: "a"
}
},
template: "<p>我是vue.component创建 自身参数:{{a}}|外部传参:{{b}}</p>"
});
//方法3 第三方模板引入,可参照上一篇文章
Vue.component('templecomponent', function(resolve, reject) {
$.get("./../xtemplate/com.html").then(function(res) {
resolve({
template: res,
props: ["b"],
data: function() {
return {
a: "a"
}
}
})
});
});
var app3 = new Vue({
el: "#app3",
data: {
vparam: "Vue.component"
}
});
</script>

  

运行结果:

我是构造函数创建:自身参数:a|外部传参:Vue.component
我是vue.component创建 自身参数:a|外部传参:Vue.component
我是导入模板 自身参数:a|外部入参:Vue.component

  

new Vue

this.$options.key表示其自定义属性值,this.$??表示系统属性值,如this.$el

特点:

1.可以通过自身components引用Vue.extend构造,通过自身data向构造传参

2.可以通过自身components引用组件模板,通过自身data向组件传参

使用范围:

1.仅限于自身

<div id="app1">
<dt1></dt1>
<vueapple v-bind:b="msg"></vueapple>
</div> <script type="text/x-template" id="dt1">
<div>这里是子组件1</div>
</script> <script>
new Vue({
el: "#app1",
data: {
msg: "vue实例参数"
},
components: {
dt1: {
template: "#dt1"
},
vueapple: apple //【引入构造】
}
}); </script>

  

运行结果:

这里是子组件1
我是构造函数创建:自身参数:a|外部传参:vue实例参数

  

前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue的更多相关文章

  1. Vue.js系列之三模板语法

    Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  2. Vue.js 系列教程 ①

    原文:intro-to-vue-1-rendering-directives-events 译者:nzbin 如果要我用一句话描述使用 Vue 的经历,我可能会说“它如此合乎常理”或者“它提供给我需要 ...

  3. Vue.js 系列教程 ②

    这是关于 JavaScript 框架 Vue.js 五个教程的第二部分.在这一部分,我们将学习组件,Props 以及 Slots.这不是一个完整的指南,而是基础知识的概述,所以你可以了解Vue.js ...

  4. Vue.js 系列教程 3:Vue-cli,生命周期钩子

    原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...

  5. Vue.js 系列教程 4:Vuex

    这是关于 JavaScript 框架 Vue.js 五个教程的第四部分.在这一部分,我们会学习使用 Vuex 进行状态管理. 这不是一个完整的指南,而是基础知识的概述,所以你可以了解 Vue.js 以 ...

  6. Vue.js 系列教程 5:动画

    原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地 ...

  7. Vue.js 系列教程 2:组件,Props,Slots

    原文:intro-to-vue-2-components-props-slots 译者:nzbin 这是关于 JavaScript 框架 Vue.js 五个教程的第二部分.在这一部分,我们将学习组件, ...

  8. Vue.js 系列教程 1:渲染,指令,事件

    原文:intro-to-vue-1-rendering-directives-events 译者:nzbin 如果要我用一句话描述使用 Vue 的经历,我可能会说“它如此合乎常理”或者“它提供给我需要 ...

  9. Vue.js系列之一初识Vue

    在看vue.js之前,可以先看这两篇文章,对于为什么要使用vue会有一定帮助 1.Vue.js !important 2.界面之下:还原真实的MV*模式 !important 3.web前端优化之re ...

随机推荐

  1. VMware桥接模式下虚拟机ping主机不通

    现象: VMware设置为桥接模式,虚拟机ping主机不通,主机ping虚拟机通. 解决: 尝试以下几种方法 关闭主机(专用网络.来宾或公用网络)和虚拟机的防火墙. 更改桥接的物理网卡,确保是主机正在 ...

  2. PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)

    输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+B 的 D 进制数. 输入 ...

  3. Selenium3+python自动化016-Selenium Grid

    一.Selenium Grid介绍 1.概念 Selenium Grid组件专门用于远程分布式测试或并发测试,通过并发执行测试用例的方式可以提高测试用例的执行速度和效率,解决界面自动化测试执行速度过慢 ...

  4. Python静态方法、类方法、属性方法

    静态方法 使用静态方法以后,相当于把下面的函数和类的关系截断了,它的作用相当于是类下面的一个独立函数,不会自动传入参数self. class people:..... @staticmethod de ...

  5. C++ -> 在使用动态链表和异质链表产生野指针的步骤

    C++ -> 在使用动态链表和异质链表产生野指针的步骤 使用异质链表产生野指针的情况,下面是修改书本的例子: ------------------------------------------ ...

  6. Luogu2422 | 良好的感觉 (单调栈)

    题目描述 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中 ...

  7. luogu P2158 [SDOI2008]仪仗队 (欧拉函数)

    欧拉函数裸题 可惜我太久没做题忘了欧拉函数是什么了... 注意判断一下n = 1的情况就好了 #include <cstdio> using namespace std; ; typede ...

  8. H5 使用input标签上传图片给后台

    html代码: <div class="hpk-showimg"> <!-- 营业执照 --> <div class="idcardup&q ...

  9. JS调用函数的两种方式

    <script type="text/javascript"> window.onload = init; //onload 表示页面全部加载完毕后,再调用init() ...

  10. Tomcat的使⽤

    准备 1.官⽹地址:http://tomcat.apache.org下载. 2.解压文件,并放到指定路径,给该文件授权. chmod -R 755 3.启动和停止 进入到/Users/lucas/Do ...