微信小程序開發(fā)日記(二)

一. VSCode開發(fā)微信小程序配置

  1. 安裝插件 minapp
  1. 安裝插件wechat-snippet
  1. 安裝wxml插件
  1. 如何調(diào)試?
    調(diào)試遇到兩個問題,第一, 如何熱更新 第二,如何看console 第三, 新建頁面\新建組件等操作還是微信IDE好一些
    這幾個問題目前都沒有太完整的解決方案, 幸運的是微信IDE有分窗彈出功能,有監(jiān)測外部更新功能,
    所以可以打開微信IDE同時打開VScode, 用vscode寫代碼,用微信IDE調(diào)試和創(chuàng)建頁面及組件

單屏都可以,雙屏3屏肯定沒問題. 有了vscode終于可以愉快了. ????????????

二 組件

  • 在組件wxss中不應(yīng)使用ID選擇器、屬性選擇器和標簽名選擇器
  • 生命周期方法可以直接定義在 Component 構(gòu)造器的第一級參數(shù)中
  • 生命周期也可以在 lifetimes 字段內(nèi)進行聲明(這是推薦的方式臭墨,其優(yōu)先級最高)
  • 因為 WXML 節(jié)點標簽名只能是小寫字母释涛、中劃線和下劃線的組合篙骡,所以自定義組件的標簽名也只能包含這些字符
  • 出于性能考慮摆碉,使用 usingComponents 時罢艾, setData 內(nèi)容不會被直接深復(fù)制

1. 創(chuàng)建組件

創(chuàng)建組件和創(chuàng)建頁面基本是一至的, 頁面其實也是一個組件
創(chuàng)建完成后,不同點在于,組件實例化的是Component類型

2. 如何使用組件

想調(diào)用其他組件時,在自己的json文件中注冊要用的組件

然后可以標簽化引用

3. 組件的JS結(jié)構(gòu) (Component構(gòu)造器)

https://developers.weixin.qq.com/miniprogram/dev/reference/api/Component.html
組件的基本結(jié)構(gòu):

// components/hello/hello.js
Component({
  behaviors:[],//mixin
  properties: {
    innerText: {
      type: String,
      value: 'default value',
    }
  },
  data: {
    msg: "hola"
  },
  methods: {
    btnclicked() {
      this.setData({
        msg: "hello",
        innerText:"no can do"
      })
    }
  },
  observers: {
    msg() {
      console.log(this.data.msg)
    }
  },
  // 生命周期函數(shù)务漩,可以為函數(shù)咱台,或一個在methods段中定義的方法名
  attached: function() {}, // 此處attached的聲明會被lifetimes字段中的聲明覆蓋
  created(){
    console.log("haha")
  },
  lifetimes: {
    // 生命周期函數(shù),可以為函數(shù)篇裁,或一個在methods段中定義的方法名
    created(){
      console.log("lolo")
    },
    attached: function() {},
    moved: function() {},
    detached: function() {},
  },
  pageLifetimes: {
    // 組件所在頁面的生命周期函數(shù)
    show: function() {},
    hide: function() {},
    resize: function() {},
  },
})

4. 父子組件通訊

(1). 父傳子 //通過屬性傳遞

父傳子通過屬性傳遞
例如:
父組件傳遞數(shù)值

<!--components/father/father.wxml-->
<text>父組件</text>
<son flist="{{fatherList}}"></son>

子組件用properties接收數(shù)值

// components/son/son.js
Component({
  /**
   * 組件的屬性列表
   */
  properties: {
    "flist":{
      type:String,
      default:[1,2,3]
    }
  },

(2). 子傳父 //通過發(fā)射事件傳遞

在父組件中調(diào)用子組件時就聲明

子組件用 this.triggerEvent('要觸發(fā)的事件',{參數(shù)},{配置})來發(fā)射事件

最后在父組件對應(yīng)方法中,獲取子組件傳遞的數(shù)據(jù)

3. 父子組件間關(guān)系法

如果我們想制作固定的,類似于ul>li這樣的組件集合,可以嘗試用組件關(guān)系法
有時要實現(xiàn)這樣的組件:

<custom-ul>
  <custom-li> item 1 </custom-li>
  <custom-li> item 2 </custom-li>
</custom-ul>

這個例子中沛慢, custom-ul 和 custom-li 都是自定義組件赡若,它們有相互間的關(guān)系达布,相互間的通信往往比較復(fù)雜。此時在組件定義時加入 relations 定義段逾冬,可以解決這樣的問題黍聂。

①. 首先,我們將父子組件建立聯(lián)系
// path/to/custom-ul.js
Component({
  relations: {
    './custom-li': {
      type: 'child', // 關(guān)聯(lián)的目標節(jié)點應(yīng)為子節(jié)點
    }
  },
Component({
  relations: {
    './custom-ul': {
      type: 'parent', // 關(guān)聯(lián)的目標節(jié)點應(yīng)為父節(jié)點
    }
  }
②. 父子組件關(guān)系還有生命周期

父子組件建立\脫離關(guān)系都可以觸發(fā)生命周期函數(shù),

例如:

// path/to/custom-ul.js
Component({
  relations: {
    './custom-li': {
      type: 'child', // 關(guān)聯(lián)的目標節(jié)點應(yīng)為子節(jié)點
      linked: function(target) {
        // 每次有custom-li被插入時執(zhí)行,target是該節(jié)點實例對象身腻,觸發(fā)在該節(jié)點attached生命周期之后
      },
      linkChanged: function(target) {
        // 每次有custom-li被移動后執(zhí)行产还,target是該節(jié)點實例對象,觸發(fā)在該節(jié)點moved生命周期之后
      },
      unlinked: function(target) {
        // 每次有custom-li被移除時執(zhí)行嘀趟,target是該節(jié)點實例對象脐区,觸發(fā)在該節(jié)點detached生命周期之后
      }
    }
  },
③ 父子組件如何互相調(diào)用 //getRelationNodes
  methods: {
    _getAllLi: function(){
      // 使用getRelationNodes可以獲得nodes數(shù)組,包含所有已關(guān)聯(lián)的custom-li她按,且是有序的
      var nodes = this.getRelationNodes('path/to/custom-li')
    }
  },

5. 插槽

(1) 默認插槽 //唯一

小程序的插槽和vue完全一樣
我們在子組件中定義了一個插槽

<!--components/comp2/comp2.wxml-->
<view class="" hover-class="none" hover-stop-propagation="false">
  <slot></slot>
</view>

在父組件中調(diào)用時往其中插入元素

<!--components/comp1/comp1.wxml-->
<comp2>
  <button>OK</button>
</comp2>

(2). 具名插槽

插槽頁可以具名:
如果使用具名插槽, 需要在子組件js中開啟配置

  options:{
    multipleSlots: true
  },

在子組件中用name屬性定義插槽名稱

<view>
  <slot name="abc"></slot>
</view>

在父組件中 用slot="插槽名" 來填充插槽

<comp2>
  <button slot="abc">OK</button>
</comp2>

有具名插槽情況下還可以有默認插槽, 只能有一個.

三. Behavior代碼復(fù)用 //mixin

我們建立一個文件mybehaviors.js, 里面放入一個可以公用的代碼

module.exports =Behavior(
{
  properties: {},
  data: {
    msg:"hello!!!"
  },
  methods: {}
})

每個組件想引用時:
直接behaviors:[require("../mybehaviors.js")],即可

6. 組件生命周期

  • created組件剛剛被生成 ,還不能調(diào)用 setData
  • 在 behaviors 中也可以編寫生命周期方法牛隅,同時不會與其他 behaviors 中的同名生命周期相互覆蓋炕柔。但要注意,如果一個組件多次直接或間接引用同一個 behavior 媒佣,這個 behavior 中的生命周期函數(shù)在一個執(zhí)行時機內(nèi)只會執(zhí)行一次匕累。

7. 組件所在頁面生命周期

8. 數(shù)據(jù)監(jiān)聽器 //監(jiān)聽屬性

和vue的監(jiān)聽屬性watch一樣

Component({
  attached: function() {
    this.setData({
      numberA: 1,
      numberB: 2,
    })
  },
  observers: {
    'numberA, numberB': function(numberA, numberB) {
      // 在 numberA 或者 numberB 被設(shè)置時,執(zhí)行這個函數(shù)
      this.setData({
        sum: numberA + numberB
      })
    }
  }
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末默伍,一起剝皮案震驚了整個濱河市欢嘿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌也糊,老刑警劉巖炼蹦,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異狸剃,居然都是意外死亡框弛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門捕捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑟枫,“玉大人,你說我怎么就攤上這事指攒】睹睿” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵允悦,是天一觀的道長膝擂。 經(jīng)常有香客問我,道長隙弛,這世上最難降的妖魔是什么架馋? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮全闷,結(jié)果婚禮上叉寂,老公的妹妹穿的比我還像新娘。我一直安慰自己总珠,他們只是感情好屏鳍,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著局服,像睡著了一般钓瞭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淫奔,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天山涡,我揣著相機與錄音,去河邊找鬼。 笑死鸭丛,一個胖子當著我的面吹牛霍殴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播系吩,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼来庭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穿挨?” 一聲冷哼從身側(cè)響起月弛,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎科盛,沒想到半個月后帽衙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡贞绵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年厉萝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榨崩。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡谴垫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出母蛛,到底是詐尸還是另有隱情翩剪,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布彩郊,位于F島的核電站前弯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秫逝。R本人自食惡果不足惜恕出,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望违帆。 院中可真熱鬧浙巫,春花似錦、人聲如沸前方。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惠险。三九已至,卻和暖如春抒线,著一層夾襖步出監(jiān)牢的瞬間班巩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抱慌,地道東北人逊桦。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像抑进,于是被迫代替她去往敵國和親强经。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容