小程序中使用behavior、數據監聽器、組件的使用

小程序中使用behavior

1.首先先定義behavior
每個 behavior 可以包含一組屬性、數據、生命週期函數和方法,組件引用它時,它的屬性、數據和方法會被合併到組件中,生命週期函數也會在對應時機被調用。每個組件可以引用多個 behavior 。 behavior 也可以引用其他 behavior 。
behavior 需要使用 Behavior() 構造器定義。

第一步:behavior.js文件中有共享的properties,data,methods等

// 第一步:創建behavior.js,裏面的properties,data,methods裏面的方法,可以共享給movie、music等等組件使用
let SmallFourBeh = Behavior({
  // 共享屬性
  properties: {
    name: String,
    type: String
  },
  // 共享數據
  data: {
    selectedName: '',
    selectedType: ''
  },
  // 共享方法
  methods: {
    behaviorTap (name, type) {
      this.setData({
        selectedName:name,
        selectedType: type
      })
    }
  }
})
export { SmallFourBeh } // 導出

第二步:在movie組件中編寫wxml和js

<!--第二步:components/movie/index.wxml-->
<view>movie:{電影名稱:{{ name }},類型:{{ type }}}</view>
<button bind:tap="onTap" data-name="{{ name }}" data-type="{{ type }}">獲取數據詳情:{{ selectedType }},{{ selectedName }}</button>
// components/movie/movie.js
// 導入
import  {SmallFourBeh}    from '../../utils/behavior.js'

Component({
  /**
   * 組件的屬性列表
   */
  behaviors:[SmallFourBeh], //繼承behavior.js裏面的properties, data,methods 
  properties: {
    name:String,
    type:String
  },

  data: {

  },

  /**
   * 組件的方法列表
   */
  methods: {
    onTap(ev) {
      let { name, type } = ev.target.dataset
      this.behaviorTap(name, type) // 通過this可以訪問behavior.js裏面的內容
    }
  } 
})

三、組件在被調用的時候傳遞參數

<movie type="{{type}}" name="{{name}}"></movie>

在data裏面定義傳遞的參數

小程序的數據監聽器

數據監聽器可以用於監聽和響應任何屬性和數據字段的變化,類似於Vue中的

文本作用域

在app.js中可以定義全局可以訪問的屬性,在**globalData: { }**對象中可以存儲全局可以訪問的屬性。可以通過使用 const app=getApp() 訪問全局的屬性。

小程序中的API

同步api
1.小程序中有同步api和異步api,同步api以Sync結尾的。 如 wx.setStorageSync,wx.getSystemInfoSync 等。同步 API 的執行結果可以通過函數返回值直接獲取,如果執行出錯會拋出異常。

異步api:
大多數 API 都是異步 API,如 wx.request,wx.login 等。這類 API 接口通常都接受一個 Object 類型的參數,這個參數都支持按需指定以下字段來接收接口調用結果:

小程序中使用模板

小程序的模板主要是對一個組件的複用性。

如果是在外部定義的模板,如果需要引用那麼需要使用
<import src="../../resource/template/template.wxml"/>
<view>小程序中使用模板</view>
<template name="staffName">  
name表示組件模板的名字
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
</template>


<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>
可以使用解構,  data是指定數據源。 is是指定的名字。

wxs的使用

wxs主要是對數據進行處理的。

Page({
  data: {
    array: [1, 2, 3, 4, 5, 1, 2, 3, 4]
  }
})
<!--wxml-->
<!-- 下面的 getMax 函數,接受一個數組,且返回數組中最大的元素的值 -->
<wxs module="m1">
var getMax = function(array) {
  var max = undefined;
  for (var i = 0; i < array.length; ++i) {
    max = max === undefined ?
      array[i] :
      (max >= array[i] ? max : array[i]);
  }
  return max;
}

module.exports.getMax = getMax;
</wxs>

<!-- 調用 wxs 裏面的 getMax 函數,參數爲 page.js 裏面的 array -->
<view> {{m1.getMax(array)}} </view>

小程序中組件的使用

1.組件引用外部樣式類:

此時可以在 Component 中用 externalClasses 定義段定義若干個外部樣式類。

/* 組件 custom-component.js */
Component({
  externalClasses: ['my-class']
})
<!-- 組件 custom-component.wxml -->
<custom-component class="my-class">這段文本的顏色由組件外的 class 決定</custom-component>

2.Component構造器:
Component構造器可用於定義組件,調用 Component 構造器時可以指定組件的屬性、數據、方法等。

3.組件間通信與事件

父親向兒子傳值: 通過使用屬性傳值的方式。
兒子向父親傳值: 通過使用this.triggerEvent(‘myevent’,{‘參數列表’}),在父親裏面定義方法,通過e.detail可以獲得父親傳遞的參數。

<component  bind:myevent="onClick" ></component> 

4.組件的生命週期
created attached detached
組件實例剛剛被創建好時, created 生命週期被觸發,此時還不能調用 setData

attached 生命週期被觸發。此時, this.data 已被初始化爲組件的當前值。這個生命週期很有用,絕大多數初始化工作可以在這個時機進行。

在組件離開頁面節點樹後, detached 生命週期被觸發。退出一個頁面時,如果組件還在頁面節點樹中,則 detached 會被觸發

5.數據監聽
有時,在一些數據字段被 setData 設置時,需要執行一些操作。

例如, this.data.sum 永遠是 this.data.numberA 與 this.data.numberB 的和。此時,可以使用數據監聽器進行如下實現。

Component({
  attached: function() {
    this.setData({
      numberA: 1,
      numberB: 2,
    })
  },
  observers: {
    'numberA, numberB': function(numberA, numberB) {
      // 在 numberA 或者 numberB 被設置時,執行這個函數
      this.setData({
        sum: numberA + numberB
      })
    }
  }
})

6.組件的插槽的使用
如果要開啓多個插槽那麼需要在組件裏面進行配置:

options:{
	multipleSlots:true
}

使用slot定義模板插槽:

<view class="page">
  <slot name="first" />
  <view>{{message}}</view>
  <view>{{number}}</view>
  <button size="mini"  bindtap="onAddClick" >按鈕</button>
   <slot name="secend" />
</view>

在組件內部引用,通過使用name指定插槽的位置

  <my-test message="{{message}}" bind:addNumber="addNum" number="{{number}}">
    <view slot="first">我是first插槽內容</view>
    <view slot="secend">我是secend插槽內容</view>
  </my-test>
發佈了19 篇原創文章 · 獲贊 16 · 訪問量 1905
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章