主頁 > 軟體設計 > 微信小程式筆記(三)自定義組件

微信小程式筆記(三)自定義組件

2021-04-11 12:05:05 軟體設計

1.創建組件:在檔案夾右鍵單擊 選擇components, 寫新建檔案夾的名稱,里面有四個檔案,
2.參考組件的方式:區域:

// 自己的json檔案
{ "usingComponents": { "my-test1": "/components/test/test" } }

全域:

app.json檔案里

"usingComponents": { "my-test2": "/components/test2/test2" }

3.組件與頁面的區別:

  • 組件的 .json 檔案中需要宣告 “component”: true 屬性
  • 組件的 .js 檔案中呼叫的是 Component() 函式
  • 整個程式啟動呼叫的是 App()
  • 某個頁面的渲染呼叫的是 Page()
  • 某個組件的渲染呼叫的是 Component()
  • 組件的事件處理函式需要定義到 methods 節點中
    4.組件的樣式隔離:組件魚頁面之間不會相互影響 (只有class選擇器才不會影響)[id,屬性,標簽會影響]
    可以設定styleIsolation屬性修改樣式:
// 在組件的.js 檔案中新增加如下配置
Component({ 
  options: { 
   /// apply-shared: // 代表頁面wxss樣式將影響自定義組件 
   ///shared: // 代表雙向的影響 
    styleIsolation: 'isolated'  // 默認值isolated: 代表啟動樣式隔離 
  } 
})
// 或在組件的.json 檔案中新增加如下配置 
{ 
  "styleIsolation": "isolated" 
}

5.組件的資料屬性和方法:data中定義資料,methods中定義函式和自定義方法,properties中定義組件對外屬性

Components({ 
// 屬性定義 
properties: 
{ 
// 完整定義 屬性的方式【當需要指定屬性默認值時,建議使用此方式】 
  max: {
// 屬性值的資料型別 type: Number, 
// 屬性值的默認值 
    value: 10 
  },
// 簡化定義 屬性的方式 
    max: Number 
  } 
})
  <my-test1 max="10"></my-test1>
  // ****************子組件*********
  /*** 組件的方法串列 */ 
  methods: { 
    addN1 () { 
  /*** 如果 n1 大于 max的值 ,不允許再繼續增加 */ 
      if (this.data.n1 >= this.properties.max)      
      return wx.showToast({ 
      title: '已經是最大值了哦...', 
      icon: 'none' 
     })
    this.setData({ 
      n1: this.data.n1 + 1 
    }) 
  }
},

6.properties與data的區別:如果要修改 properties 的資料, 最好通過子組件通信給父組件的方式實作
鏈接: 子組件通信修改父組件的值
簡單來講就是: this.triggerEvent('事件名稱', {num: num})
7.資料監聽:

// 0000000000000000000000監聽數值的變化
Components({ 
// observers: 觀察者 
observers: { 
  '欄位A, 欄位B': function(欄位A, 欄位B) { 
  // do something   使用setdata 欄位A+欄位B
  } 
})
// 11111111111111111111監聽單個和多個屬性的變化
Components({ 
// observers: 觀察者 
observers: { 
    //'物件.屬性A, 物件.屬性B': 
function(屬性A的新值, 屬性B的新值) { 
// 觸發此偵聽器的 3 種情況: 
// 【為屬性A賦值】:使用setData 設定this.data.物件.屬性A 時觸發 
// 【為屬性B賦值】:使用setData 設定this.data.物件.屬性B 時觸發 
// 【為物件賦值】:使用setData 設定this.data.物件 時觸發 
  } 
})
// 22222222222222222使用通配符方式
 observers: { 
    '_rgb.**':      //**表示全部的屬性
    function (obj) { 
      this.setData({ 
      fullColor:`${obj.r}, ${obj.g}, ${obj.b}` 
    }) 
  } 
}

8.純數字欄位提高性能:

Component({ 
  options: { 
// 指定所有_開頭的資料欄位為 純資料欄位 
    pureDataPattern: /^_/ 
},
data: {
   a: true, // 普通資料欄位
   _b: true // 純資料欄位 } 
 })

9.組件的生命周期:
在這里插入圖片描述
重要的三個生命周期函式:
1.created--------不能呼叫setData,應用于組件的this添加一些自定義屬性欄位
2.attached--------組件完全初始化完畢,進入頁面節點樹之后.(可以發送請求)
3.detached-------離開頁面節點樹之后,清理性作業
10.組件所在頁面的生命周期:
在這里插入圖片描述
10.自定義組件的插槽:
在這里插入圖片描述
注意點: 自定義組件只允許進行一個占位符,

<!-- 組件的封裝者 --> 
<view class="wrapper"> 
  <view>這里是組件的內部節點</view> 
  <!-- 對于不確定的內容,可以使用<slot> 進行占位, 具體內容由組件的  使用者決定 --> 
  <slot></slot> 
</view>

<!-- 組件的使用者 --> 
<component-tag-name> 
  <!-- 這部分內容將被放置在組件的 <slot>的位置上 --> 
  <view>這里是插入到組件slot中的內容</view> 
</component-tag-name>

啟用多個插槽: 要取名字

Component({ 
options: { 
  multipleSolts: true 
  // 在組件定義時的選項中啟用多 slot支持 
  },
  properties: { 
  /* ...*/ 
  },
   methods: { 
   /* ...*/ 
   } 
 })

11.父子通信:
1.屬性系結: 父向子傳值------只能是資料------JSON兼容格式

  count="{{count}}"   // 這是屬性系結
  // 子組件使用properties接收(.js檔案)
  properties: {
    count: Number
  }

2.事件系結: 子向父傳值------任意資料
在這里插入圖片描述

// 父組件定義countAdd方法:
countAdd () {
  // dosomething.....
}
// 父組件的xwml:自定義事件
<son bind:addName="countAdd"></son>
// 子組件里.js
methods: {
  this.triggerEvent("addName",{value: this.properties.count})
}
// 父組件.js  
countAdd (e) {
  this.setDate({
    count: e.detail.value
  })
}

3.獲取組件實體: 父組件使用----this.selectComponent(“class或者·id選擇器”)獲取子組件實體物件 (訪問任意資料和方法)

<my-test class="cusstomA" id="cA" count="{{count}}" bind:sync="syncCount"> 
</my-test> 
   <button bindtap="getChild">獲取子組件實體</button> 
 //父組件的js檔案 按鈕的tap事件處理函式 
 getChild() { 
 // 切記下面的引數不能傳遞標簽選擇器,不然回傳的是null 
 // 也可以傳遞ID選擇器 
   const child = this.selectComponent('.customA') 
 // 呼叫子組件的setData方法,修改count的值, 
   child.setData({ 
     count: this.data.count + 1 
   }) 
   child.addCount() 
 // 直接呼叫子組件的addCount方法,該方法在child實體物件的 __proto__上可以訪問到該方法 
}

12.behaviors: 組件代碼共享----

// 創建  myBehavior.js
module.exports = Behavior({
  properties: {},
  data: { username: 'zs' },
  methods: {}
})
// 使用
const myBehavior = require("/路徑/")
Component({
  behaviors: [myBehavior]
})
//  wxml
<view>{{ username }}</view>

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/274885.html

標籤:其他

上一篇:SpringCloud+SpringBoot 專案搭建 (一) Eureka

下一篇:SpringBoot快速整合Mybatis、MybatisPlus(代碼生成器)實作資料庫訪問

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more