微信小程序自定義組件實現搜索框

簡介

小程序組件其實很簡單,其實我們用的view 笆环、text 因悲、lable 就是一個組件,只不過這些組件是小程序官方指定的峻黍,小程序的自定義組件一般使用場景為:有一段代碼或者一個功能复隆,經常在不同的頁面使用,這就導致我們需要在不同的頁面去寫重復的代碼姆涩,重復造輪子挽拂。
比如說好幾個頁面都會有列表,都需要搜索功能骨饿,哪我們就可以把搜索框做成組件亏栈,然后再需要的頁面直接引入進去,就可以使用宏赘。

效果圖

image.png

實戰(zhàn)之定義組件

一绒北、新建及存放位置

新建一個 components 文件夾,用于存放我們以后開發(fā)中的所用組件 如圖:


image.png

在components文件夾中右鍵察署,選擇"新建Component"镇饮;

二、相關配置

組件名稱.json 配置

{
    "component": true,
    "usingComponents": {}
}

在test.josn文件中添加字段 component:true 這個字段表明這是一個組件,這個字段在新建的頁面的json文件中是沒有的储藐,官方默認它為false俱济,也就是非組件

組件名稱.wxml

<!--搜索框-->
<view class="input_search_bar">
  <view class="input_search_bar_form">
    <!--點擊之后,出現input框 -->
    <view class="input_search_bar_box">
      <icon class="order_icon_search_in_box" type="search" size="20"></icon>
      <input type="text" class="input_search_bar_input" maxlength="15" placeholder="{{holderText}}" value="{{inputVal}}"
        bindinput="inputTyping" />
      <!--輸入款字數大于0钙勃,則顯示清除按鈕 -->
      <view class="order_icon_clear" wx:if="{{inputVal.length > 0}}" bindtap="clearInput">
        <icon type="clear" size="20"></icon>
      </view>
    </view>
  </view>
  <!--動態(tài)出現的“搜索”鍵 -->
  <view class="input_search_bar_cancel_btn" bindtap="searchBtn">搜索</view>
</view>

組件名稱.wxss

/**搜索框**/
.input_search_bar {
  position: relative;
  padding-top: 15rpx;
  padding-left: 10rpx;
  padding-right: 10rpx;
  display: -webkit-box;
  display: -webkit-flex;
  display: flex;
  box-sizing: border-box;
  width: 740rpx;
}

.input_search_bar .input_search_bar_form {
  position: relative;
  -webkit-box-flex: 1;
  -webkit-flex: auto;
  flex: auto;
  border-radius: 15rpx;
  background: var(--viewBackgroundColor);
}

.input_search_bar .input_search_bar_form .input_search_bar_box {
  position: relative;
  padding-left: 45rpx;
  padding-right: 60rpx;
  width: 100%;
  box-sizing: border-box;
  z-index: 1;
}

.input_search_bar .input_search_bar_form .input_search_bar_box .order_icon_search_in_box {
  position: absolute;
  left: 15rpx;
  top: 8rpx;
}

.input_search_bar .input_search_bar_form .input_search_bar_box .input_search_bar_input {
  height: 50rpx;
  line-height: 50rpx;
  font-size: 30rpx;
  padding-left: 25rpx;
}

.input_search_bar .input_search_bar_form .input_search_bar_box .order_icon_clear {
  position: absolute;
  top: 0;
  right: 0;
  padding: 7rpx 8rpx;
}

.input_search_bar .input_search_bar_cancel_btn {
  margin-left: 12rpx;
  margin-top: 12rpx;
  line-height: 28rpx;
  color: var(--themeColor);
  white-space: nowrap;
  font-size: 30rpx;
}

組件名稱.js

Component({
  /**
   * 組件的屬性列表
   */
  properties: {
    holderText: {
      type: String,
      value: "請輸入內容"
    }
  },

  /**
   * 組件的初始數據
   */
  data: {
    inputVal: ""
  },

  /**
   * 組件的方法列表
   */
  methods: {
    clearInput: function () {
      this.setData({
        inputVal: "",
      });
      this.triggerEvent("searchVal", this.data.inputVal);
    },
    inputTyping: function (e) {
      this.setData({
        inputVal: e.detail.value
      });
    },
    searchBtn: function () {
      this.triggerEvent("searchVal", this.data.inputVal);
    }
  }
})

自定義組件的 js 文件中蛛碌,需要使用 Component() 來注冊組件,并提供組件的屬性定義辖源、內部數據和自定義方法蔚携。組件的屬性值和內部數據將被用于組件 wxml 的渲染

實戰(zhàn)之調用組件

調用頁面.json

{
  "usingComponents": {
    "InputSearch":"/components/InputSearch/InputSearch"
  },
  "navigationBarTitleText": "加工云-已發(fā)布訂單"
}

調用頁面.wxml

<view class="my_order_page">
  <InputSearch bindsearchVal="handleSearchVal" holderText="請輸入訂單名稱"></InputSearch>
</view>

注意:bindsearchVal 去除掉bind,searchVal 和組件.js中的this.triggerEvent("searchVal")對應
調用頁面.js

  /**
   * 查詢按鈕觸發(fā)函數
   * @param {參數} e 
   */
  handleSearchVal(e) {
    getApp().preventActive(() => {
      const orderName = e.detail;
      this.setData({
        page: 1,
        orderName: orderName,
        contentList: []
      });
      this.orderList();
    })
  }

handelSearchVal(e)名稱和調用頁面.wxml 中的bindsearchVal=”handleSearchVal“ 對應克饶,否則找不到觸發(fā)函數

效果圖

image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末酝蜒,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子矾湃,更是在濱河造成了極大的恐慌亡脑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邀跃,死亡現場離奇詭異霉咨,居然都是意外死亡,警方通過查閱死者的電腦和手機拍屑,發(fā)現死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門途戒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人僵驰,你說我怎么就攤上這事喷斋。” “怎么了蒜茴?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵继准,是天一觀的道長。 經常有香客問我矮男,道長移必,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任毡鉴,我火速辦了婚禮崔泵,結果婚禮上,老公的妹妹穿的比我還像新娘猪瞬。我一直安慰自己憎瘸,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布陈瘦。 她就那樣靜靜地躺著幌甘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锅风,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天酥诽,我揣著相機與錄音,去河邊找鬼皱埠。 笑死肮帐,一個胖子當著我的面吹牛,可吹牛的內容都是我干的边器。 我是一名探鬼主播训枢,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忘巧!你這毒婦竟也來了恒界?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砚嘴,失蹤者是張志新(化名)和其女友劉穎十酣,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體枣宫,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年吃环,在試婚紗的時候發(fā)現自己被綠了也颤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡郁轻,死狀恐怖翅娶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情好唯,我是刑警寧澤竭沫,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站骑篙,受9級特大地震影響蜕提,放射性物質發(fā)生泄漏。R本人自食惡果不足惜靶端,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一谎势、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杨名,春花似錦脏榆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春坞生,著一層夾襖步出監(jiān)牢的瞬間仔役,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工恨胚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骂因,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓赃泡,卻偏偏與公主長得像寒波,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子升熊,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容