1-10 vue全局组件和局部组件

vue全局组件和局部组件

Vue.js的组件化思想 —— 上

一、Vue中的组件

  • Vue视图层的灵魂 —— 组件化
vuea7.png

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。

在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展。

  • 全局组件的创建和注册
vuea11.png
  • 案例代码:

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <my-component></my-component>
        </div>
    <script src="js/vue.js"></script>
    <script>
        // 1. 创建组件构造器
        var Profile = Vue.extend({
            template: '<h1>我是自定义组件</h1>'
        });
    
        // 2. 注册组件, 指定组件的名称
        Vue.component('my-component', Profile);
    
        new Vue({
            el: '#app'
        })
    </script>
    </body>
    </html>
    

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

调用Vue.component()注册组件时,需要提供2个参数:组件的标签名 和 组件构造器;注册的组件要挂载到某个Vue实例下,否则它不会生效;

Vue.extend() 和 Vue.component():由于 Vue 本身是一个构造函数,Vue.extend() 是一个类继承方法,它用来创建一个 Vue 的子类并返回其构造函数。

而Vue.component() 的作用在于:建立指定的构造函数与 ID 字符串间的关系,从而让 Vue.js 能在模板中使用它;直接向 Vue.component() 传递 options 时,它会在内部调用 Vue.extend()。

  • 局部组件的创建和注册
    • 案例代码

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>注册局部组件</title>
      </head>
      <body>
          <div id="root">
              <my-component></my-component>
          </div>
          <div id="root2">
              <my-component></my-component>
          </div>
      <script src="js/vue.js"></script>
      <script>
          // 1. 创建组件构造器
          var Profile = Vue.extend({
              template: '<li>创建局部组件!</li>'
          })
          new Vue({
              el: '#root',
              components: {
                  'my-component': Profile
              }
          })
          new Vue({
              el: '#root2'
          })
      </script>
      </body>
      </html>
      
  • 另一种组件创建和注册方式
    • 直接通过Vue.component注册或获取全局组件,主要体现在以下几种方式:

      // 注册组件,传入一个扩展过的构造器
      Vue.component('my-component', Vue.extend({ /* ... */ }))
      // 注册组件,传入一个选项对象(自动调用 Vue.extend)
      Vue.component('my-component', { /* ... */ })
      // 获取注册的组件(始终返回构造器)
      var MyComponent = Vue.component('my-component')
      
    • 自定义全局组件

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title></title>
      </head>
      <body>
        <div id="app">
            <my-component></my-component>
        </div>
      <script src="js/vue.js"></script>
      <script>
          Vue.component('my-component', {
              template: '<h1>自定义全局组件</h1>'
          })
          new Vue({
              el:'#app'
          })
      </script>
      </body>
      </html>
      
    • 自定义局部组件

      <!doctype html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Document</title>
      </head>
      <body>
      <div id="app">
          <my-component1></my-component1>
          <my-component2></my-component2>
      </div>
      <script src="js/vue.js"></script>
      <script>
          var app = new Vue({
              el: '#app',
              components: {
                  'my-component1': {
                      template: '<h1>局部组件1!</h1>'
                  },
                  'my-component2': {
                      template: '<h2>局部组件2!</h2>'
                  }
              }
          })
      </script>
      </body>
      </html>
      
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 6,678评论 0 6
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,471评论 0 29
  • 下载安装搭建环境 可以选npm安装,或者简单下载一个开发版的vue.js文件 浏览器打开加载有vue的文档时,控制...
    冥冥2017阅读 11,269评论 0 42
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 13,797评论 4 129
  • 组件简介# 组件系统:组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件...
    Gopal阅读 2,444评论 0 3