wepy中的this.$apply()在什么时候用,以及methods方法中的调用

本文介绍了一个用于深能环保的单据选择组件,该组件使用了wepy框架和vant组件库,实现了从服务器获取待扫描的单据列表,并通过radio-group组件让用户选择特定的单据进行后续操作。文章详细展示了组件的模板、脚本和样式代码,以及如何通过fetch请求与后端交互,获取和更新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <view class="select">
    <view class='item'>
      <radio-group @change="radioChange">
        <label class="radio"
               wx:for='{{ items }}'
               wx:key='{{index}}'>
          <radio value="{{item.EDOC_NO}}" />
          <view class='item_list'>
            <view>单号: {{item.EDOC_NO}}</view>
            <view>制作单位: {{item.CREATE_TIME}} 单据类型: {{item.EDOC_TYPE}}</view>
          </view>
        </label>
      </radio-group>
    </view>
    <view class='btn'
          @tap='btnSure'>
      确定
    </view>
     <van-notify id="custom-selector" />
    <van-notify id="van-notify" />
  </view>
</template>

<script>
import wepy from 'wepy'
import fetch from '../utils/fetch.js'
import Notify from '../components/vant/notify/notify'
export default class Select extends wepy.page {
  config = {
    navigationBarTitleText: '深能环保',
    'usingComponents': {
      'van-notify': '../components/vant/notify/index'
    }
  }
  onLoad (query) {
    console.log(query)
    this.username = query.username
    this.$apply()
    this.getInfoDetail()
  }
  onShow () {
    // fetch({
    //   url: 'https://yx.seee.com.cn/ashare/edocApp/waitScan',
    //   method: 'POST',
    //   data: {
    //     'PARAMETER': {
    //       // 'USER_NAME': this.username
    //       'USER_NAME': '000955'
    //     }
    //   },
    //   header: {
    //     'content-type': 'application/json' // 默认值
    //   }
    // }).then((res) => {
    //   if (res.data.RESPONSE_HEADER.RESPONSE_STATUS === 'Y') {
    //     Notify({
    //       text: res.data.RESPONSE_HEADER.RESPONSE_MESSAGE,
    //       duration: 1000,
    //       selector: '#custom-selector',
    //       backgroundColor: '#1989fa'
    //     })
    //     if (res.data.RESPONSE_CONTEXT && res.data.RESPONSE_CONTEXT.EDOC_HEADER) {
    //       // this.items = res.data.RESPONSE_CONTEXT.EDOC_HEADER
    //       //  this.items = res.data.RESPONSE_CONTEXT.EDOC_HEADER
    //       this.items = res.data.RESPONSE_CONTEXT.EDOC_HEADER
    //       // this.$apply()
    //       console.log(this.items, 'items')
    //       this.$apply()
    //       // this.$apply()
    //     }
    //   } else {
    //     Notify(res.data.RESPONSE_HEADER.RESPONSE_MESSAGE)
    //   }
    // })
  }
  data = {
    username: '',
    items: [],
    seleted: ''
  }
  methods = {
    // 选择框的状态
    radioChange (e) {
      let value = e.detail.value
      this.seleted = value
      this.$apply()
    },
    // 点击确认跳转页面
    btnSure () {
      // 根据单号 获取任务id
      fetch({
        url: 'https://yx.seee.com.cn/ashare/edocApp/beforeUpload',
        method: 'POST',
        data: {
          'PARAMETER': {
            'EDOC_NO': this.seleted
          }
        },
        header: {
          'content-type': 'application/json' // 默认值
        }
      }).then((res) => {
        if (res.data.RESPONSE_HEADER.RESPONSE_STATUS === 'Y') {
          wepy.navigateTo({
            // 传参数到下一个页面
            // TODO:需要传入一个id值
            url: `/pages/lastStep?id=${res.data.RESPONSE_CONTEXT.BILL_HEADER_ID}&inputName=${this.seleted}`
          })
        }
      })
    }
  }
  getInfoDetail () {
    fetch({
      url: 'https://yx.seee.com.cn/ashare/edocApp/waitScan',
      method: 'POST',
      data: {
        'PARAMETER': {
          // 'USER_NAME': this.username
          'USER_NAME': '000955'
        }
      },
      header: {
        'content-type': 'application/json' // 默认值
      }
    }).then((res) => {
      if (res.data.RESPONSE_HEADER.RESPONSE_STATUS === 'Y') {
        Notify({
          text: res.data.RESPONSE_HEADER.RESPONSE_MESSAGE,
          duration: 1000,
          selector: '#custom-selector',
          backgroundColor: '#1989fa'
        })
        if (res.data.RESPONSE_CONTEXT && res.data.RESPONSE_CONTEXT.EDOC_HEADER) {
          // this.items = res.data.RESPONSE_CONTEXT.EDOC_HEADER
          //  this.items = res.data.RESPONSE_CONTEXT.EDOC_HEADER
          this.items = res.data.RESPONSE_CONTEXT.EDOC_HEADER
          this.$apply()
          console.log(this.items, 'items')

          // this.$apply()
        }
      } else {
        Notify(res.data.RESPONSE_HEADER.RESPONSE_MESSAGE)
      }
    })
  }
}
</script>

<style lang="less">
.select {
  .item {
    .radio {
      height: 150rpx;
      margin-bottom: 30rpx;
      background: #f2f2f2;
      radio {
        transform: scale(0.7);
      }
      display: flex;
      justify-content: space-around;
      .item_list {
        view:nth-child(1) {
          margin-bottom: 10rpx;
          color: #ff0000;
          font-size: 32rpx;
          font-weight: bold;
        }
        view:nth-child(2) {
          color: #515151;
          font-weight: bold;
          font-size: 28rpx;
        }
        margin-top: 30rpx;
      }
    }
  }
  .btn {
    height: 80rpx;
    width: 25%;
    background: #ffa847;
    text-align: center;
    line-height: 80rpx;
    margin: 0 auto;
    border-radius: 15rpx;
    color: #fff;
  }
}
</style>

在你为data里面的数据进行绑定的时候,是需要的。

比如data里面你定义了一个x='',然后你在自定义的方法里面用this.x=200 之后,需要用this.$apply()来进行数据绑定。这样你在view中绑定data中的x变量时,才会有200,不然就是空

不过有个前提,method里面的方法是不用这个的,但methods里面只能放bindtap这类方法,所以你自己定义的其他方法,或者写在onshow里面,就必须得用this.$apply()。

methods = {

    onRemove(e) {

        console.log('onRemove', e)

    },

    imgRemove(e) {

        this.methods.onRemove(e)

    }

}

### 如何在 Wepy 项目中集成和使用 Towxml #### 修改 `index.wpy` 文件以支持 Towxml 渲染 为了使 Wepy 支持 Towxml,需先调整页面结构文件。假设已经在 `src/pages/index/index.wpy` 中定义了一个基础模板[^1]: ```html <template> <view> <text class="title">欢迎使用wepy</text> </view> </template> <script> export default class Index extends wepy.page { } </script> ``` #### 安装 Towxml 插件 接下来安装 Towxml npm 包以便于后续操作。打开命令行工具并执行如下指令完成插件下载: ```bash npm install towxml --save ``` #### 配置 Towxml 初始化设置 编辑项目的入口文件 `app.js` 或者创建一个新的配置文件用于初始化 Towxml 实例: ```javascript import { createApp } from 'towxml'; const app = getApp(); createApp(app); ``` 此段代码确保了当应用启动时会自动加载 Towxml 并将其挂载到全局对象上。 #### 更新页面逻辑处理部分 回到之前提到的 `index.wpy` 页面脚本区域, 添加必要的属性声明以及方法实现来调用 Towxml 功能: ```js <script> import wepy from '@wepy/core'; import towxml from 'towxml'; export default class Index extends wepy.page { data = { content: '<p>这是通过 Towxml 解析的内容。</p>' }; onLoad() { this.parseContent(this.data.content); } methods = { parseContent(htmlString){ const result = towxml.htmlToWXML(htmlString); console.log(result); // 将解析后的结果赋给data中的变量,从而渲染到界面上 this.$apply(() => { this.parsedResult = result; }); } }; } </script> ``` 上述代码展示了如何利用 Towxml 提供的方法将 HTML 字符串转换成适合微信小程序使用的 WXML 结构,并最终显示出来[^2]。 #### 调整页面展示内容 最后一步是在 `<template>` 标签内加入新的绑定表达式,让经过 Towxml 处理过的结果能够呈现在用户面前: ```html <template> <view> <!-- 原始文本 --> <text class="title">{{parsedResult}}</text> <!-- 如果需要直接插入复杂的HTML,则可以这样写 --> {{#raw}} {{{ parsedResult }}} {{/raw}} </view> </template> ``` 以上就是完整的在 Wepy 应用程序里集成了 Towxml 的过程说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值