微信小程序中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的执行速度
Jan 23 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
Dec 30 Javascript
JS中创建函数的三种方式及区别
Mar 13 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
微信小程序 this和that详解及简单实例
Feb 13 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
vue登录注册实例详解
2019/09/14 Javascript
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
人力资源管理专业学生自我评价
2013/11/20 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
法律专业求职信
2014/05/24 职场文书
计算机毕业生求职信
2014/06/10 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
运动员入场前导词
2015/07/20 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
Java内存模型之happens-before概念详解
2021/06/13 Java/Android