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

Vue3 props

组件与组件之间不是完全独立的,而是有交集的,组件与组件之间可以传递数据,通过props属性可以让子组件接收父组件传递过来的数据。

以父组件-App.vue,子组件-Person.vue为例:

将子组件当作HTML中的标签一样,可以设置属性等。

在传递时需要使用:var进行绑定,就是v-bind:var

结合TS语法,在src/types目录下创建TS文件,定义接口:

// 接口
export interface PersonProps {
    name: string;
    age: number;
  }

// 一个自定义类型
export type Persons = Array<PersonProps>;

在组件中导入时需要注意:对于类型的来说,需要使用type进行声明:

import {type Persons } from '@/types/PersonInter';

@表示根目录 - src,从上往下寻找。

父组件内容:

<template>
  <div id="app">
    <Person :a="3" :list="personList" />
  </div>
</template>

<script lang="ts" setup>
  import Person from './components/Person.vue';
  import { ref, onMounted, reactive } from 'vue';
  import {type Persons} from '@/types/PersonInter';


  let personList = reactive<Persons>([
  {name: '张三', age: 18},
  {name: '李四', age: 20},
  {name: '王五', age: 22}
]);
</script>

<style scoped>
  .app {
    background-color: aqua;
    box-shadow: 0 0 10px rgba(0,0,0,0.1);
  }
</style>

使用接口,需要声明响应式数据时,可以使用reactive<VarType>(),用泛型表示

子组件内容:

  • 仅接收

    <template>
      <div class="person">
        <ul>
          <li v-for="v in list" :key="v.name">{{ v.name }}, {{ v.age }}</li>
        </ul>
      </div>
    </template>
    
    <script lang="ts" setup name="Person">
    import { defineProps, withDefaults } from 'vue';
    import {type Persons } from '@/types/PersonInter';
    
    
    
    defineProps(['list'])
    </script>
    
  • 接收 + 限制

    <template>
      <div class="person">
        <ul>
          <li v-for="v in list" :key="v.name">{{ v.name }}, {{ v.age }}</li>
        </ul>
      </div>
    </template>
    
    <script lang="ts" setup name="Person">
    import { defineProps, withDefaults } from 'vue';
    import {type Persons } from '@/types/PersonInter';
    
    
    
    defineProps<{list:Persons}>()
    </script>
    
  • 接收 + 限制类型 + 指定默认值 + 限制必要性

    <template>
      <div class="person">
        <ul>
          <li v-for="v in list" :key="v.name">{{ v.name }}, {{ v.age }}</li>
        </ul>
      </div>
    </template>
    
    <script lang="ts" setup name="Person">
    import { defineProps, withDefaults } from 'vue';
    import {type Persons } from '@/types/PersonInter';
    
    
    
    withDefaults(defineProps<{list?:Persons}>(),{
      list:()=>[{name:'张三',age:18}]
    })
    </script>
    

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

相关文章:

  • 什么是SSL及SSL的工作流程
  • C++,设计模式,【目录篇】
  • 深入探索 Vue.js 组件开发中的最新技术:Teleport 和 Suspense 的使用
  • 【记录52】el-table-column 添加fixed属性 滚动条无法滑动
  • 02.02、返回倒数第 k 个节点
  • 基于 Python 的财经数据接口库:AKShare
  • 注册中心介绍
  • 【原创】java+springboot+mysql劳动教育网系统设计与实现
  • efinance库支持哪些类型的金融数据获取?
  • GitHub每日最火火火项目(10.16)
  • Linux platform子系统和设备树
  • 知识篇:(五)JavaScript 数组进阶操作:对象属性操作、数组转换与求和
  • 在uniapp中实现即时通讯中的【发送语音】
  • 不同数据类型转换与转义的对比差异
  • HarmonyOS NEXT 开发之ArkTS基础入门
  • 搭建`mongodb`副本集-开启权限认证 mongo:7.0.5
  • 单片机输出方波
  • 若依框架篇-若依框架搭建具体过程、后端源代码分析、功能详解(权限控制、数据字典、定时任务、代码生成、表单构建、接口测试)
  • AI测试之 TestGPT
  • 如何解决与kernel32.dll相关的常见错误:详细指南解析kernel32.dll文件缺失、损坏或错误加载问题
  • 仓库管理系统
  • AD9361 的 TX 输出中添加前置放大器,并在 RX 输入中添加 LNA。
  • 深度解析计数排序:原理、特性与应用
  • Shiro认证 -- (Authentication)
  • TCP Analysis Flags 之 TCP Window Update
  • 鸡兔同笼(贪心)