網站首頁 前端文檔 正文
前言
wxs文件是小程序中的邏輯文件,它和wxml結合使用。
不同于js, wxs可以直接作用到視圖層,而不需要進行視圖層和邏輯層的setData數據交互;
因為這個特性,wxs非常適合應用于優化小程序的頻繁交互操作中;
應用
過濾器
在IOS環境中wxs的運行速度要遠高于js,在android中兩者表現相當。
使用wxs作為過濾器也可以一定幅度提升性能;讓我們來看一個過濾器來了解其語法。
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
上面的代碼實現了數字保留兩位小數的功能。
wxml文件:
<wxs src="./filter.wxs" module="filter"></wxs> <text>{{filter(1)}}</text>
基本語法:在視圖文件中通過wxs標簽引入,module值是自定義命名,之后在wxml中可以通過filter調用方法
上面的代碼展示了 wxs的運行邏輯,讓我們可以像函數一樣調用wxs中的方法;
下面再看一下wxs針對wxml頁面事件中的表現。
拖拽
使用交互時(拖拽、上下滑動、左右側滑等)如果依靠js邏輯層,會需要大量、頻繁的數據通信。卡頓是不可避免的;
使用wxs文件替代交互,不需要頻繁使用setData導致實時大量的數據通信,從而節省性能。
下面展示一個拖拽例子
wxs文件:
function touchstart(event) { var touch = event.touches[0] || event.changedTouches[0] startX = touch.pageX startY = touch.pageY }
事件參數event和js中的事件event內容中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(第二個參數)為觸發事件的視圖層wxml上下文。可以查找頁面所有元素并設置style,class(足夠完成交互效果)
注意:在參數event中同樣有一個上下文實例instance;event中的實例instance作用范圍是觸發事件的元素內,而事件的ins參數作用范圍是觸發事件的組件內。
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>
上面的例子,解釋了事件的基本交互用法。
文件之中相互傳參
在事件交互中,少不了需要各個文件之中傳遞參數。 下面是比較常用的幾種
wxs傳參到js邏輯層
wxs文件中:
var dragStart = function (e, ins) { ins.callMethod('callback','sldkfj') }
js文件中:
callback(e){ console.log(e) } // sldkfj
使用callMethod方法,可以執行js中的callback方法。也可以實現傳參;
- !!!callMethod不支持傳回調函數*
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文件中的參數傳遞到wxs需要通過wxml文件中轉。
js文件觸發handler事件,改變a的值之后,最新的a傳遞到wxml中。
wxml中prop改變會觸發wxs中的change事件。change中則會接收到最新prop值
wxs中獲取dataset(wxs中獲取wxml數據)
wxs中代碼
var dragStart = function (e) { var index = e.currentTarget.dataset.index; var index = e.instance.getDataset().index; }
上面有提到e.instance是當前觸發事件的元素實例。
所以e.instance.getDataset()獲取的是當前觸發事件的dataset數據集
注意點
wxs和js為不同的兩個腳本語言。但是語法和es5基本相同,確又不支持es6語法; getState 在多元素交互中非常實用,歡迎探索。
不知道是否是支持的語法可以跳轉官網文檔; wxs運算符、語句、基礎類庫、數據類型
總結
原文鏈接:https://juejin.cn/post/6995065856451411981
相關推薦
- 2022-07-12 合理使用gateWay過濾器,實現Concroller自動注入用戶信息
- 2024-03-02 前端directus對接單點登錄
- 2022-06-14 詳解Python中生成隨機數據的示例詳解_python
- 2022-05-01 Python?Pandas讀取Excel日期數據的異常處理方法_python
- 2022-10-14 Redis緩存擊穿解決方案之互斥鎖
- 2021-11-28 jQuery實現全部購物車功能實例_jquery
- 2022-03-08 C#中BackgroundWorker類用法總結_C#教程
- 2022-12-27 Python實現ATM簡單功能的示例詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支