当前位置: 首页 > article >正文

vue3组件传值具体使用

问:

left.vue文件调用接口获取了后端返回的urlLink字段,我该怎么传递给总的父组件index.vue中,我需要点击父组件的一个按钮来触发跳转?

回答:

在 Vue 3 中使用 TypeScript 和 `setup` 语法糖时,可以通过 `emit` 和 `props` 来实现子组件向父组件传递数据。以下是一个示例,展示如何在子组件 `Left.vue` 中获取后端返回的 `urlLink` 字段,并将其传递给父组件 `Index.vue`,然后在父组件中点击按钮时触发跳转。

### 子组件 `Left.vue`

<template>
  <div>
    <!-- 子组件的内容 -->
  </div>
</template>

<script lang="ts" setup>
import { ref, onMounted } from 'vue';

const emit = defineEmits(['urlLinkUpdated']);
const urlLink = ref('');

const fetchUrlLink = async () => {
  // 模拟后端返回的 urlLink
  const mockUrlLink = 'https://www.example.com';
  urlLink.value = mockUrlLink;
  // 将 urlLink 发射给父组件
  emit('urlLinkUpdated', urlLink.value);
};

onMounted(() => {
  fetchUrlLink();
});
</script>

<style scoped>
/* 子组件的样式 */
</style>
```

### 父组件 `Index.vue`

<template>
  <div>
    <Left @urlLinkUpdated="handleUrlLinkUpdated" />
    <button @click="navigateToUrl">Go to URL</button>
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import Left from './Left.vue';

const urlLink = ref('');

const handleUrlLinkUpdated = (link: string) => {
  urlLink.value = link;
};

const navigateToUrl = () => {
  if (urlLink.value) {
    window.location.href = urlLink.value;
  } else {
    alert('URL is not available.');
  }
};
</script>

<style scoped>
/* 父组件的样式 */
</style>
```

### 解释

1. **子组件 `Left.vue`**:
   - 使用 `ref` 定义 `urlLink`。
   - 使用 `defineEmits` 定义父组件需要监听的事件。
   - 在 `onMounted` 生命周期钩子中调用 `fetchUrlLink` 方法,模拟从后端获取 `urlLink`。
   - 使用 `emit('urlLinkUpdated', urlLink.value)` 将 `urlLink` 发射给父组件。

2. **父组件 `Index.vue`**:
   - 导入并使用子组件 `Left`。
   - 使用 `ref` 定义 `urlLink`。
   - 监听子组件发射的 `urlLinkUpdated` 事件,并在 `handleUrlLinkUpdated` 方法中更新父组件的 `urlLink` 数据。
   - 在按钮点击事件 `navigateToUrl` 中,检查 `urlLink` 是否有效,然后使用 `window.location.href` 进行跳转。

通过这种方式,你可以将子组件中获取的 `urlLink` 传递给父组件,并在父组件中通过按钮点击事件触发跳转。


http://www.kler.cn/a/513096.html

相关文章:

  • AQS公平锁与非公平锁之源码解析
  • Tcl教程
  • 数据分析 基础定义
  • LeetCode:37. 解数独
  • 【LC】2239. 找到最接近 0 的数字
  • AIGC视频生成明星——Emu Video模型
  • AI软件栈:中间表示
  • MySQL 8.4及以上版本压缩包安装 windows
  • Java中的几个元老 Object Class 和 @Retention
  • 使用 Helm 部署 RabbitMQ 高可用集群(HA)
  • 1.2.神经网络基础
  • @LoadBalanced注解的实现原理
  • 打游戏时总是“红网”怎么回事,如何解决
  • C# 网络协议第三方库Protobuf的使用
  • 【EdgeAI实战】(1)STM32 边缘 AI 生态系统
  • 软件工程的原则
  • SpringBoot笔记(1)
  • spring自动装配常用注解
  • ipad和macbook同步zotero文献附件失败的解决办法
  • influxdb+grafana+jmeter
  • 软件测试丨Redis 的数据同步策略以及数据一致性保证
  • 常见Arthas命令与实践
  • github配置ssh连接
  • Java 在包管理与模块化中的优势:与其他开发语言的比较
  • 深入理解 JVM 的垃圾收集器:CMS、G1、ZGC
  • 【Rabbitmq】Rabbitmq高级特性-发送者可靠性