vue的组件初始化、局部组件与全局组件

组件:一个带名字的可复用的vue实例,继承自实例,实例有的组件都会有,只是会有部分变化。

1、组件的创建

  通过Vue.extend创建一个组件,template是字符模板

let xixi = Vue.extend({ template: '<h1>你好世界</h1>'})

2、组件的注册

  通过Vue.component("组件名",创建的组件)来注册创建的组件

Vue.component("MyComponent",xixi)

3、组件的使用

<mycomponent></mycomponent>

注意:使用时必须放在被vue实例所关联的标签的内部,使用组件名时,注意驼峰命名和连接线命名的切换,因为组件在使用时不允许驼峰命名法的形式使用,组件的使用也可以使用单标签的形式,比如:

<div id="app">
    {{ test }}
    <mycomponent></mycomponent>
    <mycomponent></mycomponent>
  <mycomponent/>//单标签使用 <!-- <MyComponent></MyComponent> -->//会报错 </div> <script> // 将组件的创建和注册合并 简写 // Vue.component('MyComponent',{ // template:'<h1>你好世界</h1>' // }) // 使用组件名注意驼峰命名和连接线命名的切换 Vue.component('my-component',{ template:'<h1><p>你好世界</p></h1>' }) new Vue({ data: { test: 'test', } }).$mount('#app') </script>

 

4、组件

<div id="app">
    {{ test }}
    <my-component></my-component>
    <my-component></my-component>
  </div>

  <template id="tp1">
    <div>
      这里是组件模板23424
      <img src="" alt="">
      <ul>
        <li>1231</li>
      </ul>
      <div>年龄{{ age }}</div>
      <button @click="add"> add </button>
    </div>
 
  </template>
  <script>
    // template 类似于 实例中 el 将组件和一个template模板绑定
    // 只能有一个根元素
    // 组件中data是一个fun 内部返回一个对象
    // 组件中的template 和 实例中的el类似
    Vue.component('MyComponent',{
      template: '#tp1',
      data() {
        return {
          age:16
        }
      },
      methods: {
        add() {
          console.log(this)
          this.age = this.age + 1
        }
      }
    })

    new Vue({ 
      el: '#app',
      data: {
        test: 'test',
      }
    })
  </script>

5、全局组件

(1)通过Vue.component注册的组件是全局组件

(2)通过实例内部的components注册的组件是局部组件

(3)在注册过后的全局组件,后面所有的实例都可以访问

  <div id="app1">
    1
    <my-test></my-test>
  </div>
<hr>
  <div id="app2">
    2
    <my-test></my-test>
  </div>
<hr>
  <div id="app3">
    3
    <my-test></my-test>
  </div>



<script>
 
    new Vue({}).$mount('#app1')//无法访问下面的组件

    Vue.component('MyTest',{ template: "<h1>测试组件</h1>"})
    Vue.component('MyTest',{ template: "<h1>测试组件222</h1>"})
    new Vue({}).$mount('#app2')
    new Vue({}).$mount('#app3')
  </script>

6、局部组件

(1)局部组件通过实例或者组件内部的components进行注册

(2)只能在注册的实例或者组件当中使用,别的地方无法使用

<div id="app1">
    11
    <my-test/>
  </div>

  <div id="app2">
    //<my-test/>
    22
  </div>

  <script>
    new Vue({
      components: {
        'MyTest': {
          template: '<h1>测试组件</h1>'
        },
        // 'MyTest': {
        //   template: '<h1>测试组件11</h1>'
        // }
      }
    }).$mount('#app1')

    new Vue({}).$mount('#app2')//app2无法使用组件
  </script>

7、组件的嵌套

(1)全局组件本身没有层级之分,根据用户的使用情况来划分子父组件或者兄弟组件

<div id="app1">
    <parent>

    </parent>
    <son></son>
  </div>

  <template id="parent">
    <div>
      这里是父组件
    </div>
  </template>

  <template id="son">
    <div>
      这里是子组件
      <!-- <parent></parent> -->
    </div>
  </template>

  <script>
    // 组件标签内部的内容会被忽略,除非使用插槽slot
    Vue.component('parent', { template: "#parent" })
    Vue.component('son', { template: "#son" })
    new Vue({}).$mount('#app1')


  </script>

(2)局部组件的嵌套

  (1)局部组件在注册完成就已经确定了嵌套关系,只能按照嵌套关系来使用

<div id="app1">
    <parent></parent>
    
  </div>

  <template id="parent">
    <div>
      这里是父组件
      <son></son>
    </div>
  </template>

  <template id="son">
    <div>
      这里是子组件
    </div>
  </template>

  <script>
    new Vue({
      components: {
        parent: {
          template: '#parent',
          components: {
            son: {
              template: '#son',
            }
          }
        },
        // son: {
        //   template: '#son'
        // }
      }
    }).$mount('#app1')


  </script>

 

posted @ 2022-05-06 09:04  倚栏听风时  阅读(1238)  评论(0编辑  收藏  举报