最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序中wxs文件的一些妙用分享

 更新時(shí)間:2022年01月05日 15:18:21   作者:HealthyZhang  
wxs相當(dāng)于一個(gè)獨(dú)立模塊,相當(dāng)于一個(gè)獨(dú)立出來的module對象,通過module.exports向外暴露,在文件中引入即可使用,下面這篇文章主要給大家介紹了關(guān)于微信小程序中wxs文件的一些妙用,需要的朋友可以參考下

前言

wxs文件是小程序中的邏輯文件,它和wxml結(jié)合使用。

不同于js, wxs可以直接作用到視圖層,而不需要進(jìn)行視圖層和邏輯層的setData數(shù)據(jù)交互;

因?yàn)檫@個(gè)特性,wxs非常適合應(yīng)用于優(yōu)化小程序的頻繁交互操作中;

應(yīng)用

過濾器

在IOS環(huán)境中wxs的運(yùn)行速度要遠(yuǎn)高于js,在android中兩者表現(xiàn)相當(dāng)。

使用wxs作為過濾器也可以一定幅度提升性能;讓我們來看一個(gè)過濾器來了解其語法。

wxs文件:

var toDecimal2 = function (x) {
  var f = parseFloat(x);
  if (isNaN(f)) {
    return '0.00'
  }
  var f = Math.round(x * 100) / 100;
  var s = f.toString();
  var rs = s.indexOf('.');
  if (rs < 0) {
    rs = s.length;
    s += '.';
  }
  while (s.length <= rs + 2) {
    s += '0';
  }
  return s;
}
module.exports = toDecimal2

上面的代碼實(shí)現(xiàn)了數(shù)字保留兩位小數(shù)的功能。

wxml文件:

<wxs src="./filter.wxs" module="filter"></wxs>
<text>{{filter(1)}}</text>

基本語法:在視圖文件中通過wxs標(biāo)簽引入,module值是自定義命名,之后在wxml中可以通過filter調(diào)用方法

上面的代碼展示了 wxs的運(yùn)行邏輯,讓我們可以像函數(shù)一樣調(diào)用wxs中的方法;

下面再看一下wxs針對wxml頁面事件中的表現(xiàn)。

拖拽

使用交互時(shí)(拖拽、上下滑動、左右側(cè)滑等)如果依靠js邏輯層,會需要大量、頻繁的數(shù)據(jù)通信。卡頓是不可避免的;

使用wxs文件替代交互,不需要頻繁使用setData導(dǎo)致實(shí)時(shí)大量的數(shù)據(jù)通信,從而節(jié)省性能。

下面展示一個(gè)拖拽例子

wxs文件:

function touchstart(event) {
  var touch = event.touches[0] || event.changedTouches[0]
  startX = touch.pageX
  startY = touch.pageY
}

事件參數(shù)event和js中的事件event內(nèi)容中touches和changedTouches屬性一致

function touchmove(event, ins) {
  var touch = event.touches[0] || event.changedTouches[0]
  ins.selectComponent('.div').setStyle({
    left: startX - touch.pageX + 'px',
    top: startY - touch.pageY  + 'px'
  })
}

ins(第二個(gè)參數(shù))為觸發(fā)事件的視圖層wxml上下文。可以查找頁面所有元素并設(shè)置style,class(足夠完成交互效果)

注意:在參數(shù)event中同樣有一個(gè)上下文實(shí)例instance;event中的實(shí)例instance作用范圍是觸發(fā)事件的元素內(nèi),而事件的ins參數(shù)作用范圍是觸發(fā)事件的組件內(nèi)。

module.exports = {
  touchstart: touchstart,
  touchmove: touchmove,
}

最后將方法拋出去,給wxml文件引用。

wxml文件

<wxs module="action" src="./movable.wxs"></wxs> 
<view class="div" bindtouchstart="{{action.touchstart}}" bindtouchmove="{{action.touchmove}}"></view>

上面的例子,解釋了事件的基本交互用法。

文件之中相互傳參

在事件交互中,少不了需要各個(gè)文件之中傳遞參數(shù)。 下面是比較常用的幾種

wxs傳參到j(luò)s邏輯層

wxs文件中:

var dragStart = function (e, ins) {
	ins.callMethod('callback','sldkfj')
}

js文件中:

callback(e){
	console.log(e)
}
// sldkfj

使用callMethod方法,可以執(zhí)行js中的callback方法。也可以實(shí)現(xiàn)傳參;

  • ?。?!callMethod不支持傳回調(diào)函數(shù)*

js邏輯層傳參到wxs文件

js文件中:

handler(e){
	this.setData({a:1})
}

wxml文件:

<wxs module="action" src="./movable.wxs"></wxs> 
<view change:prop="{{action.change}}" prop="{{a}}"></view>

wxs文件中:

change(newValue,oldValue){}

js文件中的參數(shù)傳遞到wxs需要通過wxml文件中轉(zhuǎn)。

js文件觸發(fā)handler事件,改變a的值之后,最新的a傳遞到wxml中。

wxml中prop改變會觸發(fā)wxs中的change事件。change中則會接收到最新prop值

wxs中獲取dataset(wxs中獲取wxml數(shù)據(jù))

wxs中代碼

var dragStart = function (e) {
  var index = e.currentTarget.dataset.index;
  var index = e.instance.getDataset().index;
}

上面有提到e.instance是當(dāng)前觸發(fā)事件的元素實(shí)例。

所以e.instance.getDataset()獲取的是當(dāng)前觸發(fā)事件的dataset數(shù)據(jù)集

注意點(diǎn)

wxs和js為不同的兩個(gè)腳本語言。但是語法和es5基本相同,確又不支持es6語法; getState 在多元素交互中非常實(shí)用,歡迎探索。

不知道是否是支持的語法可以跳轉(zhuǎn)官網(wǎng)文檔; wxs運(yùn)算符、語句、基礎(chǔ)類庫、數(shù)據(jù)類型

總結(jié)

到此這篇關(guān)于微信小程序中wxs文件的一些妙用的文章就介紹到這了,更多相關(guān)微信小程序wxs文件妙用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript開發(fā)包大全整理

    Javascript開發(fā)包大全整理

    Javascript開發(fā)包大全整理...
    2006-12-12
  • 原生js實(shí)現(xiàn)addClass,removeClass,hasClass方法

    原生js實(shí)現(xiàn)addClass,removeClass,hasClass方法

    這篇文章主要介紹了原生js實(shí)現(xiàn)addClass,removeClass,hasClass方法和使用原生JS實(shí)現(xiàn)jQuery的addClass, removeClass, hasClass函數(shù)功能,需要的朋友可以參考下
    2016-04-04
  • 兼容IE與Firefox的js 復(fù)制代碼

    兼容IE與Firefox的js 復(fù)制代碼

    這是一段點(diǎn)擊復(fù)制的代碼,現(xiàn)在我的頁面里不僅有1個(gè)鏈接需要用到這段代碼。請哪位好心人指教一下應(yīng)該怎么用ID對應(yīng)的方式來改寫這段js,使它實(shí)現(xiàn)一個(gè)點(diǎn)擊復(fù)制對應(yīng)1個(gè)相應(yīng)內(nèi)容
    2009-12-12
  • JavaScript中Object.values()的用法舉例

    JavaScript中Object.values()的用法舉例

    這篇文章主要給大家介紹了關(guān)于JavaScript中Object.values()的用法舉例,Object.values()是JavaScript中一個(gè)內(nèi)置的靜態(tài)函數(shù),用于返回一個(gè)對象中所有屬性值的數(shù)組,需要的朋友可以參考下
    2023-09-09
  • 在table中插入多行的js代碼(與insertAdjacentHTML相似的功能)

    在table中插入多行的js代碼(與insertAdjacentHTML相似的功能)

    在table中插入多行,能使用與insertAdjacentHTML相似的功能
    2010-06-06
  • javascript Deferred和遞歸次數(shù)限制實(shí)例

    javascript Deferred和遞歸次數(shù)限制實(shí)例

    你知道Deferred和遞歸次數(shù)限制嗎?如果還不知道,可以看看下面的實(shí)例,很好,適合新手朋友們
    2014-10-10
  • 微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序

    微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序

    最近在寫小程序過程中遇到一個(gè)拖拽排序需求,上網(wǎng)一頓搜索未果,遂自行實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • JS實(shí)現(xiàn)隊(duì)列與堆棧的方法

    JS實(shí)現(xiàn)隊(duì)列與堆棧的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)隊(duì)列與堆棧的方法,結(jié)合實(shí)例形式分析了JavaScript實(shí)現(xiàn)隊(duì)列與堆棧的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • 用JS得到字符串中出現(xiàn)次數(shù)最多的字母

    用JS得到字符串中出現(xiàn)次數(shù)最多的字母

    一個(gè)字符串String=“adadfdfseffserfefsefseetsdg”,找出里面出現(xiàn)次數(shù)最多的字母和出現(xiàn)的次數(shù)。 經(jīng)典的解答思路為:取出字符串的第一個(gè)字符(首字母),利用的字符串的 replace 方法將符合正則表達(dá)式(第一個(gè)字符)替代為空,此字母出現(xiàn)的次數(shù)為原始的字符串長度減去替代后的字符串長度。循環(huán)迭代找出長度最長的字母。
    2008-03-03
  • JSON鍵值對序列化和反序列化解析

    JSON鍵值對序列化和反序列化解析

    這篇文章主要介紹了JSON鍵值對序列化和反序列化知識,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-01-01

最新評論

油尖旺区| 岢岚县| 尚志市| 龙海市| 毕节市| 连山| 准格尔旗| 白沙| 白玉县| 崇信县| 邯郸市| 弥勒县| 青海省| 封开县| 原阳县| 五大连池市| 广东省| 武川县| 平远县| 娱乐| 封开县| 丹棱县| 邳州市| 广宁县| 咸阳市| 本溪| 洪泽县| 新安县| 崇阳县| 华宁县| 佛冈县| 东安县| 嵩明县| 墨脱县| 来宾市| 民县| 宁陵县| 桐柏县| 磴口县| 河东区| 阿合奇县|