目录

一、应用场景

二、报错解释

三、报错原因

1、 以下是实际应用代码:

 2、 原因

​四、解决办法


一、应用场景

      在做uni-app的过程中有使用到uni-popup弹出层组件。(以下取自uni-app官网手册——扩展组件):

<template>
	<view>
		<button @click="open">打开弹窗</button>
		<uni-popup ref="popup" type="bottom">底部弹出 Popup</uni-popup>
	</view>
</template>
<script>
export default {
   methods:{
      open(){
        // 通过组件定义的ref调用uni-popup方法 ,如果传入参数 ,type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
        this.$refs.popup.open('top')
      }
   }
}
</script>

二、报错解释

     使用该代码时,报[Vue warn]: Error in v-on handler: "TypeError: Cannot read properties of undefined (reading 'open')"的错误,表示“找不到open这个元素,无法解析这串代码”。

this.$refs.popup.open('top')

三、报错原因

   1、 以下是实际应用代码:
<view class="ist">
			<uni-card v-for="(item,index) in list" :key="index" :title="item.code" :thumbnail="img">
				<view class="">
					<ul @click="onClickToExamin(item)">
						<li>color:{{item.color}}</li>
					<button @click="stop">点击</button>
				</view>
           <uni-popup ref="popup" type="bottom">底部弹出 Popup</uni-popup>
			</uni-card>
				
</view>

  运行结果报错:

 

 2、 原因

      <uni-popup></uni-popup>标签放在了被遍历实行的uni-card组件当中,因此,uni-popup组件也被遍历执行了N次,所以用this.$refs.popup来获取uni-popup组件的open方法就不合适了。应该用this.$refs.popup[下标值]来获取。

       可以通过打印this.$refs.popup直观地感受一下:

四、解决办法

1、 把uni-popup组件放在遍历组件外,再用this.$refs.popup.open();
2、放在遍历组件中,通过加下标this.$refs.popup[0].open()获取
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐