详解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 相关文章推荐
关于文本限制字数的js代码
Apr 02 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
js 走马灯简单实例
Nov 21 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
JS Attribute属性操作详解
May 19 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
vue项目中用cdn优化的方法
Jan 03 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
小程序中的箭头函数的具体使用
Jun 19 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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 Smarty 字符比较代码
2011/02/27 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
python实现定时发送邮件
2020/12/23 Python
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
十周年庆典策划方案
2014/06/03 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
务工证明怎么写
2015/06/18 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python