uni-app icon indicating copy to clipboard operation
uni-app copied to clipboard

vue3 小程序自定义组件, props 编译后丢失

Open llt22 opened this issue 1 year ago • 6 comments
trafficstars

// vue2 中源码
<rich-now-ad tag="100" :detail="richNowData" @close="oncloseRichNowAd" />

// vue2 中编译的结果
<rich-now-ad vue-id="5dd2eb54-11" tag="100" detail="{{richNowData}}" data-event-opts="{{[['^close',[['oncloseRichNowAd']]]]}}" data-com-type="wx" ref="__r" data-event-list="onClose" onClose="__e" class="data-v-7a5bdf46" onVueInit="__l"></rich-now-ad>

// vue3 中源码
<view>
    {{ richNowData }}
    <rich-now-ad tag="101" :detail="richNowData" @close="oncloseRichNowAd" />
  </view>

// vue3 中编译的结果
<view>{{a}} <rich-now-ad onClose="{{b}}" u-t="m" u-i="015f2418-0" onVI="__l" u-p="{{c}}"/></view>


可以看到 vue3 中,自定义的属性全部丢了,导致我无法向组件内传递数据

llt22 avatar Jul 15 '24 08:07 llt22

看一下你的rich-now-ad组件是如何写的

GRCmade avatar Jul 16 '24 03:07 GRCmade

看一下你的rich-now-ad组件是如何写的

const modalPlugin = requirePlugin('richNowPlugin')

Component({
  props: {
    detail: {},
    onClose: (data) => console.log(data),
  },
  data: {
    interstitialAd: {},
  },
  onInit() {
    this.setData({
      interstitialAd: new modalPlugin.CreateInterstitialAd(),
    })

    this.data.interstitialAd.onLoad(() => {
      this.data.interstitialAd.show({
        spaceCode: 'xxxxxxxxx',
        rtaExtMap: {
          organization_type: 'xxxx',
          organization_sub_type: this.props.detail.organizationSubType,
          device_location: this.props.detail.deviceLocation,
          device_id: this.props.detail.deviceCode,
          public_opinion_level: this.props.detail.publicOpinionLevel,
          touch_point_location: 'index',
          touch_point_type: 'full_screen',
        },
      })
    })

    this.data.interstitialAd.onClose((res) => {
      this.props.onClose(res)
    })

    this.data.interstitialAd.onError(() => {
      this.props.onClose({
        type: 'err',
      })
    })
  },
  methods: {},
})

llt22 avatar Jul 17 '24 09:07 llt22

自定义组件的props被编译掉是符合预期的,props会在运行时动态传递,不会影响实际功能。 还有你的小程序自定义组件写错了吧,应该是

  properties: {
    detail: {},
    onClose: (data) => console.log(data),
  },

然后在自定义组件内, this. detail 是可以获取具体的值的

bfc846958672 avatar Aug 16 '24 05:08 bfc846958672

自定义组件的props被编译掉是符合预期的,props会在运行时动态传递,不会影响实际功能。 还有你的小程序自定义组件写错了吧,应该是

  properties: {
    detail: {},
    onClose: (data) => console.log(data),
  },

然后在自定义组件内, this. detail 是可以获取具体的值的

是支付宝的自定义组件

llt22 avatar Aug 21 '24 06:08 llt22

自定义组件的props被编译掉是符合预期的,props会在运行时动态传递,不会影响实际功能。 还有你的小程序自定义组件写错了吧,应该是

  properties: {
    detail: {},
    onClose: (data) => console.log(data),
  },

然后在自定义组件内, this. detail 是可以获取具体的值的

没理解你说的符合预期的是什么意思。最终的表现就是在 vue3 中,我无法把 props 数据从外面传进来,vue2 是正常的

llt22 avatar Aug 21 '24 06:08 llt22

符合预期的意思是 props会正常工作,不影响使用。如果子组件无法使用props,提议提供一下可复现的demo,我这边排查一下

bfc846958672 avatar Aug 25 '24 13:08 bfc846958672

长时间未响应,关闭本issue。 如还有问题,可 reopen issue 继续讨论。

bfc846958672 avatar Sep 02 '24 04:09 bfc846958672