详解vue.js全局组件和局部组件


Posted in Javascript onApril 10, 2017

这两天学习了Vue.js 感觉组件这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

首先Vue组件的使用有3个步骤,创建组件构造器,注册组件,使用组件3个方面。

代码演示如下:

<!DOCTYPE html>
<html>
  <body>
    <div id="app">
      <!-- 3. #app是Vue实例挂载的元素,应该在挂载元素范围内使用组件-->
      <my-component></my-component>
    </div>
  </body>
  <script src="js/vue.js"></script>
  <script>
  
    // 1.创建一个组件构造器
    var myComponent = Vue.extend({
      template: '<div>This is my first component!</div>'
    })
    
    // 2.注册组件,并指定组件的标签,组件的HTML标签为<my-component>
    Vue.component('my-component', myComponent)
    
    new Vue({
      el: '#app'
    });
    
  </script>
</html>

2.理解组件的创建和注册

我们用以下几个步骤来理解组件的创建和注册:

1. Vue.extend()是Vue构造器的扩展,调用Vue.extend()创建的是一个组件构造器,而不是一个具体的组件实例。

2. Vue.extend()构造器有一个选项对象,选项对象的template属性用于定义组件要渲染的HTML。

3. 使用Vue.component()注册组件时,需要提供2个参数,第1个参数时组件的标签,第2个参数是组件构造器。

4. Vue.component()方法内部会调用组件构造器,创建一个组件实例。

5. 组件应该挂载到某个Vue实例下,否则它不会生效。

请注意第5点,以下代码在3个地方使用了<my-component>标签,但只有#app1和#app2下的<my-component>标签才起到作用。

<!DOCTYPE html>
<html>
  <body>
    <div id="app1">
      <my-component></my-component>
    </div>
    
    <div id="app2">
      <my-component></my-component>
    </div>
    
    <!--该组件不会被渲染-->
    <my-component></my-component>
  </body>
  <script src="js/vue.js"></script>
  <script>
    var myComponent = Vue.extend({
      template: '<div>This is a component!</div>'
    })
    
    Vue.component('my-component', myComponent)
    
    var app1 = new Vue({
      el: '#app1'
    });
    
    var app2 = new Vue({
      el: '#app2'
    })
  </script>
</html>

全局注册和局部注册

调用Vue.component()注册组件时,组件的注册是全局的,这意味着该组件可以在任意Vue示例下使用。

如果不需要全局注册,或者是让组件使用在其它组件内,可以用选项对象的components属性实现局部注册。

上面的示例可以改为局部注册的方式:

<!DOCTYPE html>
<html>
  <body>
    <div id="app">
      <!-- 3. my-component只能在#app下使用-->
      <my-component></my-component>
    </div>
  </body>
  <script src="js/vue.js"></script>
  <script>
    // 1.创建一个组件构造器
    var myComponent = Vue.extend({
      template: '<div>This is my first component!</div>'
    })
    
    new Vue({
      el: '#app',
      components: {
        // 2. 将myComponent组件注册到Vue实例下
        'my-component' : myComponent
      }
    });
  </script>
</html>

由于my-component组件是注册在#app元素对应的Vue实例下的,所以它不能在其它Vue实例下使用。

<div id="app2">
  <!-- 不能使用my-component组件,因为my-component是一个局部组件,它属于#app-->
  <my-component></my-component>
</div>

<script>
  new Vue({
    el: '#app2'
  });
</script>

如果你这样做了,浏览器会提示一个错误。

详解vue.js全局组件和局部组件

//注册组件(全局 component)
Vue.component("my-component",{
  template:'<div>这是一个全局组件测试 </div>'
});
new Vue({
  el:"#app5"
})

//(局部components)

new Vue({
  el:"#app6",
  components:{
    'test-component':{
      template:"<div>这是一个局部的组件测试</div>"
    }
  }
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
你真的了解JavaScript吗?
Feb 24 Javascript
JavaScript 字符串连接性能优化
Dec 20 Javascript
了解jQuery技巧来提高你的代码
Jan 08 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
JS格式化数字保留两位小数点示例代码
Oct 15 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
微信小程序实现animation动画
Jan 26 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
详解vue3中组件的非兼容变更
Mar 03 Vue.js
Vue2.0使用过程常见的一些问题总结学习
Apr 10 #Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 #jQuery
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 #jQuery
vue构建单页面应用实战
Apr 10 #Javascript
bootstrap suggest下拉框使用详解
Apr 10 #Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 #Javascript
关于vue.js过渡css类名的理解(推荐)
Apr 10 #Javascript
You might like
php实现的在线人员函数库
2008/04/09 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
Python中input和raw_input的一点区别
2014/10/21 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python__new__内置静态方法使用解析
2020/01/07 Python
python中count函数简单的实例讲解
2020/02/06 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
特岗教师个人总结
2015/02/10 职场文书
二年级作文之动物作文
2019/11/13 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python