6. 微信模板语法

WXML(WeiXin Markup Language)是框架设计的⼀套标签语⾔,结合基础组件事件系统,可以构建出⻚⾯的结构。

6.1 数据绑定

6.1.1 普通写法

<!--pages/img/img.wxml-->
<text>pages/img/img.wxml</text>
<text>pages/img/img.wxml</text>
<view>{{message}}</view>
<view>{{number}}</view>
<view>{{isSelect}}</view>
<view>{{isNotSelect}}</view>
<view>{{person.id}}</view>
<view>{{person.name}}</view>
<view>{{person.age}}</view>
<view>{{person.height}}</view>
<view>{{person.weight}}</view>
<view data-design="{{person.name}}">自定义属性attr</view>
<checkbox checked="{{isSelect}}"></checkbox> 
<checkbox checked="{{isNotSelect}}"></checkbox> 

Page({
    data: {
        message: 'Hello MINA!'
    }
})

 上面代码一些变量没有定义完整。

 提示:

  1. text 标签相当于 HTML中的 span 标签,行内元素,不会换行;
  2. view 标签相当于HTML中的 div 标签,默认为块级元素,会换行;
  3. checkbox 标签就是 HTML 中的复选框

注意:字符串和花括号之间一定不要存在空格,否则会导致数据识别失败。

6.1.2 组件属性

<view id="item-{{id}}"></view>
<view data-design="{{person.name}}">自定义属性attr</view>

6.2 运算

<view>{{1+1}}</view>
<view>{{'1'+'2'}}</view>
<view>{{1+1==3? "是" : "否"}}</view>
  1. 可以在花括号中加入表达式 不可以加入 语句
  2. 表达式
    1. 指的是一些简单运算:数字运算、字符串拼接、逻辑运算等……
      1. 数字的加减
      2. 字符串拼接
      3. 三元表达式
  3. 语句
    1. 复杂的代码段
      1. if else
      2. switch
      3. do while
      4. for

6.3 列表渲染

6.3.1 wx:for单层循环数组

项的变量名默认为 item, wx:for-item可以指定数组当前元素的变量名

下标变量名默认为 index,wx:for-index 可以指定数组当前下标的变量名

wx:key 用来提高数组渲染的性能

wx:key 绑定的值有如下选择:

  • 1. string类型,表示循环项中的唯一属性,如:

list: [
    {
        id: 1,
        name: '张三',
    }, {
        id: 2,
        name: '李四'
    }
]
wx:key = "id"
  • 2. 保留字 *this ,它的意思是 item 本身,*this 代表的必须是唯一的字符串和数组。
list: [1, 2, 3, 4, 5];
wx:key = "*this"

代码:

<view 
    wx:for="{{userList}}" 
    wx:for-item="item" 
    wx:for-index="index"
    wx:key="id">{{index}} -- {{item.id}} -- {{item.name}}</view>
 
<view 
    wx:for="{{userList}}" 
    wx:key="id">{{index}} -- {{item.id}} -- {{item.name}}</view> 
<view 
 
Page({
    data: {
        userList: [
          {
              id: 1,
              name: '张三',
          }, {
              id: 2,
              name: '李四'
          }
       ]
    }
})

 

6.3.2 wx:for单层循环对象

wx:for = "{{对象}}" wx:for-item = "对象的值" wx:for-index = "对象的属性"

循环对象的时候最好把item和index的名称都修改一下:

wx:for-item = "value" wx:for-index = "key"

person:  {
  id: 1,
  name: '張三',
  height: 155,
  weight: 120,
  age: 10
}
    
 <view 
    wx:for="{{person}}"
    wx:for-item = "value" 
    wx:for-index = "key" 
    wx:key="id">
    {{key}} -- {{value}}
  </view>

6.3.3 wx:for嵌套循环数组

当出现数组的嵌套循环的时候,尤其要注意,以下绑定的名称不要重名

默认情况下,我们不写

wx:for-item = "item" wx:for-index="index" 小程序也会把循环项的默认名称item和索引名称 index

只有一层循环的话(wx:for-item="item"  wx:for-index="index")可以省略

 

userList2: [
      {
        id: 1,
        name: '張三',
        height: 155,
        weight: 120,
        age: 10,
        children: [
          {
            id: 11,
            name: '張三1',
            height: 155,
            weight: 120,
            age: 10
          },
          {
            id: 12,
            name: '張三2',
            height: 155,
            weight: 120,
            age: 10
          },
        ]
      },
      {
        id: 2,
        name: '李四',
        height: 155,
        weight: 120,
        age: 10,
        children: [
          {
            id: 21,
            name: '李四1',
            height: 155,
            weight: 120,
            age: 10,
          },
          {
            id: 22,
            name: '李四2',
            height: 155,
            weight: 120,
            age: 10,
          }
        ]
      },
    ]
    
<view
  wx:for="{{userList2}}"
  wx:for-item="parent"
  wx:key="id">
     {{parent.id}}--{{parent.name}}
    <view
      wx:for="{{parent.children}}"
      wx:for-item="son"
      wx:key="id">
      {{son.id}}--{{son.name}}
     </view>
</view>

6.3.4 block

渲染有一个包含多个结点的结构块 block 最终不会变成真正的dom元素

  1. 占位符的标签
  2. 写代码的时候,可以看到这个标签的存在
  3. 页面渲染的时候,小程序会把它移除掉

 

<block  wx:for="{{[1,2,3]}}" wx:key="*this">
   <view>{{index}}:</view>
   <view>{{item}}</view>
</block>	

 

<view>
    <block wx:for="{{userList}}"
        wx:for-item="item"
        wx:for-index="index"
        wx:key="id" class="user_list">
        {{index}} -·- {{item.id}} -·- {{item.name}}
    </block>
</view>

6.4 条件渲染

6.4.1 wx:if

在框架中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块:

<view>
    <view>条件渲染</view>
    <view>
        <view wx:if="{{false}}">1</view>
        <view wx:elif="{{true}}">2</view>
        <view wx:else>3</view>
    </view>
</view>

6.4.2 hidden

在标签上直接加入属性hidden

<view>--------------</view>
<view hidden> hidden1</view>
<view hidden="{{true}}"> hidden2</view>
<view hidden="{{false}}"> hidden3</view>
<view hidden style="display: flex"> hidden4</view>
<view>===========</view>

6.4.3 wx:if 和 hidden的使用场景

  1. 当标签不是频繁的切换显示时,优先使用wx:if,直接把标签从页面结构中给移除掉
  2. 当标签频繁的切换显示的时候,优先使用hidden,通过添加样式的方式来切换显示
<view hidden style="display: flex"> hidden4</view>

这里在标签上设置了样式,会覆盖掉hidden的样式,所以这个标签会显示出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue语法,实现UniApp微信JSAPI支付可以按照以下步骤进行操作: 1. 在需要实现支付的Vue组件,引入微信公众号支付的SDK文件。可以通过在`index.html`文件添加以下代码来引入: ```html <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 2. 编写Vue组件的模板和样式,以及相关的数据和方法。 ```html <template> <div> <!-- 支付按钮 --> <button @click="wxPay">微信支付</button> </div> </template> <script> export default { methods: { // 调用微信JSAPI支付 wxPay() { if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady); } } else { this.onBridgeReady(); } }, // 支付回调方法 onBridgeReady() { const payParams = { appId: '...', timestamp: '...', nonceStr: '...', package: '...', signType: 'MD5', paySign: '...' }; WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId": payParams.appId, "timeStamp": payParams.timestamp, "nonceStr": payParams.nonceStr, "package": payParams.package, "signType": payParams.signType, "paySign": payParams.paySign }, function(res) { if (res.err_msg == "get_brand_wcpay_request:ok") { // 支付成功回调 } else { // 支付失败回调 } } ); } } } </script> <style> /* 样式 */ </style> ``` 在上面的代码,我们通过`@click`事件绑定了支付按钮的点击事件,当点击按钮时会执行`wxPay`方法。在`wxPay`方法,我们判断`WeixinJSBridge`是否已定义,如果未定义则通过事件监听等待其准备就绪,如果已定义则直接调用`onBridgeReady`方法。在`onBridgeReady`方法,我们获取支付参数并调用微信JSAPI支付。 请注意替换代码的支付参数(`payParams`)为实际的支付参数,并根据实际需求处理支付成功和失败的回调。 这样,你就可以在Vue语法实现UniApp微信JSAPI支付了。记得在页面加载时引入微信JSAPI的SDK文件,并确保支付接口的安全性和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值