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


Posted in Javascript onFebruary 18, 2022

前言

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运算符、语句、基础类库、数据类型

总结

到此这篇关于微信小程序中wxs文件的一些妙用的文章就介绍到这了,更多相关微信小程序wxs文件妙用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript中setMonth()方法的使用详解
Jun 11 Javascript
由ReactJS的Hello world说开来
Jul 02 Javascript
js获取鼠标位置实例详解
Dec 09 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
vue+vuex+axios实现登录、注册页权限拦截
Mar 09 Javascript
Javascript 之封装(Package)
Sep 14 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
vue与bootstrap实现简单用户信息添加删除功能
Feb 15 Javascript
vue-router源码之history类的浅析
May 21 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
Aug 06 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
vue项目支付功能代码详解
Feb 18 #Vue.js
JavaScript的Set数据结构详解
Feb 18 #Javascript
JS封装cavans多种滤镜组件
HTML+JS实现在线朗读器
Feb 15 #Javascript
js中Map和Set的用法及区别实例详解
Feb 15 #Javascript
canvas实现贪食蛇的实践
Vue自定义铃声提示音组件的实现
Jan 22 #Vue.js
You might like
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
C#实现将一个字符转换为整数
2017/12/12 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
vue实现微信分享功能
2018/11/28 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
python optparse模块使用实例
2015/04/09 Python
Python IDLE入门简介
2017/12/08 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python读写文件基础知识点
2019/06/10 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
python装饰器练习题及答案
2019/11/01 Python
parser.add_argument中的action使用
2020/04/20 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
电气专业应届生求职信
2013/11/01 职场文书
幼儿园老师寄语
2014/04/03 职场文书
煤矿安全承诺书
2014/05/22 职场文书
标准版离职证明书
2014/09/12 职场文书
国际贸易实训总结
2015/08/03 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Java存储没有重复元素的数组
2022/04/29 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android