详解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 行级解析读取XML文件(附源码)
Oct 12 Javascript
JavaScript 三种创建对象的方法
Oct 16 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
Nov 26 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
Aug 01 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
JavaScript用二分法查找数据的实例代码
Jun 17 Javascript
JS点击动态添加标签、删除指定标签的代码
Apr 18 Javascript
vue组件间通信六种方式(总结篇)
May 15 Javascript
VSCode搭建Vue项目的方法
Apr 30 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
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来处理多个提交任务
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
调整PHP的性能
2013/10/30 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php实现留言板功能
2017/03/05 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
javascript实现的listview效果
2007/04/28 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Python 字典dict使用介绍
2014/11/30 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
python 同时读取多个文件的例子
2019/07/16 Python
用python写爬虫简单吗
2020/07/28 Python
python 生成器需注意的小问题
2020/09/29 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
《童年的发现》教学反思
2014/02/14 职场文书
安全例会汇报材料
2014/08/23 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
银行培训心得体会范文
2016/01/09 职场文书
解析MySQL binlog
2021/06/11 MySQL
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏