详解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 相关文章推荐
Jquery实现仿京东商城省市联动菜单
Nov 19 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
JS实现touch 点击滑动轮播实例代码
Jan 19 Javascript
原生JS+Canvas实现五子棋游戏
May 28 Javascript
PHP 实现一种多文件上传的方法
Sep 20 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 jQuery
js中let能否完全替代IIFE
Jun 15 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
Jun 27 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 Javascript
vue表单验证之禁止input输入框输入空格
Dec 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 正则表达式小结
2009/08/31 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
python连接mysql实例分享
2016/10/09 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python中web框架的自定义创建
2019/09/08 Python
python爬虫要用到的库总结
2020/07/28 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
详解nodejs内置模块
2021/05/06 NodeJs
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
python中如何对多变量连续赋值
2021/06/03 Python