wxs

wxs

WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构
个人理解:就是减少与逻辑层的通信,在wxml页面上调用wxs 暴露出来的方法来完成界面的交互。

下面是实现一个div触摸移动的实例:

movable.wxs:

var startX = 0
var startY = 0
var lastLeft = lastTop = 50
function touchstart(event, ins) {
  //console.log(JSON.stringify( ins))
  var touch = event.touches[0] || event.changedTouches[0]
  console.log(touch, touch.pageX, touch.pageY)
  startX = touch.pageX
  startY = touch.pageY
  ins.callMethod('testCallmethod', {           //wxs促发逻辑层(index.js)的方法
    complete: function(res) {
      console.log('args', res)
    }
  })
  function jsons(a){
    return JSON.stringify(a)
  }
  console.log(jsons(ins.selectAllComponents()),JSON.stringify(ins.selectComponent('.movable').getDataset()),JSON.stringify(ins.selectComponent('.movable').getState()) )
}
function touchmove(event, ins) {
  var touch = event.touches[0] || event.changedTouches[0]
  var pageX = touch.pageX
  var pageY = touch.pageY
  var left = pageX - startX + lastLeft
  var top = pageY - startY + lastTop
  startX = pageX
  startY = pageY
  lastLeft = left
  lastTop = top
  // console.log('idff', pageX - context.startX, left, top)
  ins.selectComponent('.movable').setStyle({
    left: left + 'px',
    top: top + 'px'
  })
  // console.log('get data', JSON.stringify(ins.selectComponent('.movable')[0].getData()))
  // console.log('get data set', JSON.stringify(ins.selectComponent('.movable')[0].getDataset()))
  // console.log('test select', ins.selectComponent('.movable')[0].selectComponent('.dd'))
}
module.exports = {
  touchstart: touchstart,
  touchmove: touchmove,
}
index.wxml
<wxs module="test" src="./movable.wxs"></wxs>     //将wxs引入
<view wx:if="{{show}}" class="area" style='position:relative;width:100%;height:100%;'>
  <view data-index="1" data-obj="{{dataObj}}" bindtouchstart="{{test.touchstart}}" bindtouchmove="{{test.touchmove}}" bindtouchend='{{test.touchmove}}' class="movable" style="position:absolute;width:100px;height:100px;background:red;left:{{left}}px;top:{{top}}px"></view>
 
</view>
 /*1.当发生触摸事件的时候,会依次执行index.wxs里面的方法(touchstart,touchmove)*/
index.js:
Page({

  data: {
    left: 50,
    top: 50,
    taptest: 'taptest',
    show: true,
    dataObj: {
      obj: 1
    }
  },
  taptest() {
    this.setData({
      show: false,
    })
  },
  testCallmethod(){       //被wxs促发的方法
    console.log('022')
  }
})

wxs调用逻辑层js的方法

	是通过ComponentDescriptor 实例调用callMethod方法来实现,例如:
在text.wxs中有一个函数a:
	function a(event, ins) {
	  ins.callMethod('testCallmethod', {           //wxs促发逻辑层js中的方法
	    complete: function(res) {
	      console.log(111)
	    }
	  })
在逻辑层js中的testCallmethod方法会被执行:
testCallmethod(){
	console.log(22222)
}

逻辑层js调用wxs中的方法,

是通过WxsPropObserver来实现的,例如:
wxml:
<wxs module="test" src="./test.wxs"></wxs>     //将wxs引入
<input type="text" change:value='{{test.a}}' value="{{value}}" bindblur="blur"/>
/*
	上面的change:value(属性前面带change:前缀)是
	在 value属性被设置setData的时候触发 WXS 函数,值必须用{{}}括起来。
*/

js: 
blur(e){   //改变value属性的值,当value值改变之后,wxml会触发test.wxs中的a()方法
  this.setData({
    value:e.detail.value
})}
wxs:
function a(){
	console.log('wxml调用wxs的a()')
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值