微信小程序--自定義組件 + 小程序和Vue的父子組件數據傳遞


一.  創建和使用組件

  1.  自己定義組件(組件也是包含: js,json,wxml,wxss的頁面文件)

  2.  在需要使用該組件的頁面中,添加組件信息

 

創建組件

  1.  在根目錄,創建components文件夾,用來存放組件的子文件夾。

  2.  可以在components中創建子文件夾,用來作為自定義組件,子文件夾中包含:js,  wxml,  json,  wxss

聲明組件

  1.  在需要使用自定義組件的頁面. json文件中,在usingComponents對象中增加組件聲明   

{
    "usingComponents": {
            "Tabs": "../../components/Tabs/Tabs"
    }
}

在其它頁面中使用組件

在.html中使用該組件的標簽

<
Tabs>...</Tabs>

 

 

二.  父組件向子組件傳傳遞數據:通過 屬性 來傳遞

  1. 微信小程序中 父組件向子組件傳遞數據

    1.  父組件中,.html 中使用子組件標簽:<標簽名>...</標簽名>; 使用標簽屬性綁定數據: <標簽名  屬性名='{{變量名}}'></標簽名>

    2.  子組件中,.js 文件中Components對象里的屬性:properties,用來獲取父組件傳遞來的數據

      properties:{

        屬性名:{

          type:String  /  Array / ...  # 數據類型

          value:‘ ’/  【 】 /  ...    # 默認值

        }

      }

  2. Vue中 父組件向子組件傳遞數據

    1.  類似於小程序中的用法,區別:  <標簽名  v-bind:屬性名='變量名'></標簽名>      原因:  vue中想要在標簽屬性中使用變量,不能使用mustache語法,只能使用v-bind綁定

     2. 子組件接收數據類似於小程序,區別:

      props:{

        屬性名: {

        ...

        }

        

        屬性名:  Array   (數據類型)

      }

  

三.  子組件向父組件傳遞數據: 通過 綁定事件  來傳遞

  1. 微信小程序中,  子組件向父組件發送事件,傳遞數據

    1.  子組件.js中,在某個子組件事件中,通過 this.triggerEvent('自定義事件名',  數據) 綁定一個  事件名數據

    事件名1(){

      this.triggerEvent('自定義事件名2',  數據)

    }

    2.  父組件.html中, 使用組件標簽來接收綁定的事件和數據,<標簽名  bind事件名=“父組件內定義一個事件”>...</標簽名>,數據可以在父組件中定義的事件中,通過參數 e 來提取

   2. Vue中, 子組件向父組件發送事件,傳遞數據

    1. 子組件中, 邏輯與小程序相同, 區別: 使用this.$emit('自定義事件名', 數據)

    methods:{

      子組件事件名(){

        this.$emit('自定義事件名', 數據)

      }

    }

    2.父組件,  區別: <標簽名  v-on: 自定義事件名=“父組件內定義一個方法”>...</標簽名>

    注意:此時,父組件中定義的方法,可以不使用()來接收參數,且因不屬於內部事件,不會默認傳遞event到事件中, 而是會將發射時的數據傳遞到事件中

    methods:{

      父組件內定義一個方法名(數據參數){

        console.log(數據)       

      }

    }

  

四.  slot插槽

  相當於占位符,父組件傳遞什么內容,就顯示什么內容

  微信小程序插槽:

    暫無

  Vue的插槽:

    一般插槽: <slot></slot>

    具名插槽: <slot  name='自定義名稱'></slot>

    作用域插槽:<slot  : 自定義屬性名=“變量”></slot>

  Vue中,通過作用域插槽,也可以將子組件的數據,綁定到一個自定義的屬性中,傳遞給父組件使用。

  使用:

    在父組件中,通過聲明:slot-scpoe="slot"后, 就可以通過slot.插槽中的自定義的屬性名  來使用數據:

      <子組件標簽名>

        <template  slot-scpoe="slot">

          <希望插入插槽的標簽>slot.插槽中的自定義的屬性名</希望插入插槽的標簽>

        </template>

      </子組件標簽名>

 

補:ref 注冊引用信息:  可以通過ref獲取到組件的實例

# 被用來給元素或子組件注冊引用信息(ID的替代者)
# 應用在html標簽上獲取的是真實DOM元素,應用在組件標簽上是組件實例對象(vc)
用法:
    1. 打標識:```<h1 ref="xxx">.....</h1>``` 或 ```<School ref="xxx"></School>```
    2. 獲取:```this.$refs.xxx```
//父組件中通過ref獲取子組件的實例,此處獲取的子組件HelloWorld
<template>
  <div class="home">
    <h1>我是父組件<button @click="change">點我查看被ref標記的組件</button></h1>
    <HelloWorld ref="HelloWorld" />
  </div>
</template>
 
<script>
import HelloWorld from "@/components/HelloWorld.vue";
 
export default {
  name: "Home",
  components: {
    HelloWorld,
  },
  methods: {
    change() {
      console.log(this.$refs.HelloWorld);
    },
  },
};
</script>

chang()中打印調用子組件HellWorld的實例: this.$refs.HellWorld

結果:

 

 

拿到組件實例我們可以直接更改組件的數據,以及觸發組件的方法

  methods: {
    change() {
      this.$refs.HelloWorld.num+=1,
      this.$refs.HelloWorld.Subcomponents()
    },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM