当前位置: 首页 > 文档资料 > MPX 中文文档 >

类名样式绑定

优质
小牛编辑
138浏览
2023-12-01

Mpx利用wxs完整实现了Vue中的类名样式绑定,性能优良且没有任何使用限制(很多小程序框架基于字符串解析来实现该能力,只支持在模板上写简单的字面量,大大限制了使用场景)

类名绑定

类名绑定的增强指令是wx:class,可以与普通的class属性同时存在,在视图渲染中进行合成。

对象语法

wx:class中传入对象,key值为类名,value值控制该类名是否生效。

<template>
  <!--支持传入对象字面量,此处视图的class="outer active"-->
  <view class="outer" wx:class="{{ {active:active, disabled:disabled} }}">
    <!--直接直接传入对象数据,此处视图的class="inner selected"-->
    <view class="inner" wx:class="{{innerClass}}"></view>
  </view>
</template>

<script>
  import { createPage } from '@mpxjs/core'

  createPage({
    data: {
      active: true,
      disable: false,
      innerClass: {
        selected: true
      }
    }
  })
</script>

数组语法

wx:class中传入字符串数组,字符串为类名。

<template>
  <!--支持传入数组字面量,此处视图的class="outer active danger"-->
  <view class="outer" wx:class="{{ ['active', 'danger'] }}">
    <!--直接直接传入数组数据,此处视图的class="inner selected"-->
    <view class="inner" wx:class="{{innerClass}}"></view>
  </view>
</template>

<script>
  import { createPage } from '@mpxjs/core'

  createPage({
    data: {
      innerClass: ['selected']
    }
  })
</script>

样式绑定

样式的增强指令是wx:style,可以与普通的style属性同时存在,在视图渲染中进行合成。

对象语法

wx:style中传入用样式对象,带有横杠的样式名可以用驼峰写法来代替

<template>
  <!--支持传入对象字面量,模板会显得杂乱,此处视图的style="color:red;font-size:16px;font-weight:bold;"-->
  <view style="color:red;" wx:style="{{ {fontSize:'16px', fontWeight:'bold'} }}">
    <!--更好的方式是直接传入对象数据,此处视图的style="color:blue;font-size:14px;"-->
    <view wx:style="{{innerStyle}}"></view>
  </view>
</template>

<script>
  import { createPage } from '@mpxjs/core'

  createPage({
    data: {
      innerStyle: {
        color: 'blue',
        fontSize: '14px'
      }
    }
  })
</script>

数组语法

wx:style同样支持传入数组将多个样式合成应用到视图上

<template>
  <!--此处视图的style="color:blue;font-size:14px;background-color:red;"-->
  <view wx:style="{{ [baseStyle, activeStyle] }}">

  </view>
</template>

<script>
  import { createPage } from '@mpxjs/core'

  createPage({
    data: {
      baseStyle: {
        color: 'blue',
        fontSize: '14px'
      },
      activeStyle:{
        backgroundColor: 'red'
      }
    }
  })
</script>