VUE优化使用属性进行父子传参【进行自我刷新】

记录一个今天的需求:

点击子组件中修改按钮之后,父组件中的数据更新

描述思路:

1、在子组件中设置方法,操作自身刷新;

2、子组件在调用父组件方法时,会调用父组件中的显示隐藏属性,隐藏自己

3、该属性在父组件中的设置应该和隐藏子组件的方法联系在一起

一、最基本写法

(1)、设置控制属性 setTimestamp

在控制页面转换的文件目录下mutation-type.js中设置

export const SET_ADJUST_TIMESTAMP = 'SET_ADJUST_TIMESTAMP';

在mutation.js中设置

  // 设置数据修改时间
  [SET_ADJUST_TIMESTAMP](state, timestamp = 0) {
    state.adjust.timestamp = timestamp;
  },

(2)、父组件中写刷新方法

 timeStemp(){
          this.setTimestamp(Date.now());
      },

(3)、父组件将这个方法传给子组件

  如果想看更详细的解说,可以看这个 (自我推荐)

https://blog.youkuaiyun.com/weixin_42636552/article/details/89177975

(4)、子组件进行调用

     // 确定操作
      handleCommit() {
        this.$emit('timeStemp');
        this.closeDialog();
      },

      // 关闭弹窗
      closeDialog() {
        this.$emit('hideDialog');
      },

(5)看看效果

在子组件显示的时候,后面的数据是这样子的。

点击应用修改之后:

数据已经变化,说明页面刷新  【我这里使用的数据是mock模拟生成的,所以有点杂乱

二、优化设置

由于已经存在控制组件隐藏和显示的属性和方法,所以没有必要相同的东西写两遍,

降低代码冗余度是我毕生的追求,啊哈哈哈哈哈。。。

一种设置控制属性 setTimestamp不变,看后面的设置

优化思路:


将刷新方法变成一个属性,作为隐藏的参数                                 【超级喜欢这个思路】

父组件中:

 // 关闭弹窗
      hideDialog(refresh = false) {
        this.dialogVisible = false;
        if (refresh) {
          this.setTimestamp(Date.now());
        }
      },

子组件中:

 // 确定操作
      handleCommit() {
        this.closeDialog(true);
      },
      // 关闭弹窗
      closeDialog(refresh = false) {
        this.$emit('hideDialog', refresh);
      },

减少父组件向子组件传递方法的一个阶段,代码看起来也比较简洁。

 

结果一致,此处不贴,任性。


  THE     END

 

good  lunck   to  you 

 

 

 

 

 

 

 

 

 

 

 

<think>好的,用户想了解在Vue3的setup语法糖中如何实现路由传参。我需要结合提供的引用内容来整理答案。首先,根据引用[1]和[4],setup语法糖中可以使用useRoute和useRouter来处理路由。路由传参通常有query和params两种方式。引用[2]提到Vue3的编程式导航使用router.push方法,这和Vue2的$router.push类似。在子组件中,引用[4]展示了如何用defineProps接收props,但路由参数应该通过route对象获取,而不是props。需要分步骤说明如何传递参数和获取参数,包括query和params的区别,以及router.push的用法。同时,要给出代码示例,确保语法正确,比如在模板中正确使用路由,以及在setup中如何导入和使用路由相关函数。另外,要注意用户提到的语法糖特性,比如script setup的简洁写法,避免不必要的代码结构。最后,生成相关问题,可能涉及性能优化、其他传参方式或组件通信方法。</think>### Vue3 setup语法糖实现路由传参的方法 #### 1. 路由跳转传参 在`<script setup>`中使用`useRouter`进行路由跳转,支持两种传参方式: ```javascript import { useRouter } from 'vue-router' const router = useRouter() // query传参(参数显示在URL) router.push({ path: '/target', query: { id: 123, type: 'news' } }) // params传参(需提前配置路由路径) router.push({ name: 'Detail', // 路由名称 params: { id: 456 } }) ``` **注意**:params传参要求路由配置包含动态参数,如`path: '/detail/:id'`[^2][^3] #### 2. 接收路由参数 在目标组件中使用`useRoute`获取参数: ```javascript import { useRoute } from 'vue-router' const route = useRoute() // 获取query参数 console.log(route.query.id) // 输出123 // 获取params参数 console.log(route.params.id) // 输出456 ``` 两种传参方式的区别: - **query**:参数明文显示在URL,刷新不丢失 - **params**:路径更简洁,但刷新后参数会丢失[^1][^4] #### 3. 组件通信扩展 对于父子组件传值,推荐组合使用: ```javascript // 子组件 const props = defineProps(['msg']) const emit = defineEmits(['update']) // 父组件 <Child :msg="message" @update="handleUpdate"/> ``` 这种组合式API比路由传参更适合组件层级明确的数据传递[^4]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值