点击登录,精彩内容等着你

Vue3组合式api setup()中使用this失效,调用view-ui-plus的this指令失败

全栈侠客

2022-12-07
vue3的组合式api setup()中,是在ui创建之前初始化,this并没有初始化,所以在vue3中的setup中,this是不能使用的,可是iview的api中调用都是采用this.***进行调用,如何解决呢?

一、 背景

  • 搭配 <script setup> 使用组合式 API 比等价情况下的选项式 API 更高效,对代码压缩也更友好。这是由于 <script setup> 形式书写的组件模板被编译为了一个内联函数,和 <script setup> 中的代码位于同一作用域。
  • 不像选项式 API 需要依赖 this 上下文对象访问属性,被编译的模板可以直接访问 <script setup> 中定义的变量,无需一个代码实例从中代理。

二、问题描述

关于view-ui-plug中,对于一些指令,组件的使用,是使用this进行调用的,例如,Message

  1. success () {
  2. this.$Message.success('This is a success tip');
  3. },
  4. warning () {
  5. this.$Message.warning('This is a warning tip');
  6. },
  7. error () {
  8. this.$Message.error('This is an error tip');
  9. }

结果在组合式api中,特别是单组件文件中:

  1. <script setup>
  2. import {Message} from 'view-ui-plus'//需要一个一个引入
  3. //报错调用
  4. this.$Message.info('获取验证码');
  5. //可行调用
  6. Message.info('获取验证码');
  7. </script>

以上问题,通过import引入,虽然能解决问题,但是用一个调用一个,很麻烦,有没有方便的使用方法呢?
精益编程leanboot当然不会让人失望…

三、解决方案

  1. <script setup>
  2. const { proxy } = getCurrentInstance();
  3. proxy.$Message.info('获取验证码');
  4. </script>

procy 就是相对于原来的this的使用,可以收就是vue的对象引用

阅读 2461     最后编辑 2022-12-07 14:22
文章补充
评论(0) 发表新评论
  • ...暂无评论...

我是有底线的 评论与点赞5分钟更新一次
回复评论
取消关闭

请先登录