锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. Vue入门之watch、组件、Props

Vue入门之watch、组件、Props

0
  • 软件开发
  • 发布于 2024-08-19
  • 0 次阅读
黄健
黄健

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


兴酣落笔摇五岳,诗成笑傲凌沧洲。
功名富贵若长在,汉水亦应西北流。
------《江上吟》



文章目录

  • Vue入门之watch、组件、Props
    • 1. `watch`
      • 1.1 script setup
      • 1.2 template
      • 1.3 style scoped
      • 1.4 页面效果
    • 2. 组件
      • 2.1 子组件创建
      • 2.2 script setup
      • 2.3 template
      • 2.4 style scoped
      • 2.5 页面效果
    • 3. `Props`
      • 3.1 子组件创建
      • 3.2 script setup
      • 3.3 template
      • 3.4 style scoped
      • 3.5 页面效果
    • 4. 代码示例
    • 5. 项目demo


Node.js的下载、安装和配置
node的下载、安装、配置和使用(node.js下载安装和配置、npm命令汇总、cnpm的使用)
Vue3入门之创建vue3的单页应用(vite+vue)
Vue入门第一篇(环境配置、脚手架安装、项目创建、项目运行访问、项目结构详解等)
Vue入门第二篇(基本语法、实例演示)
Vue专栏


Vue入门之watch、组件、Props

文末附本文所有示例代码的下载地址以及基于vite构建vue3的项目demo地址

1. watch

侦听器
watch可侦听一个ref或其他类型的数据源,当值改变时会触发回调

注意:在使用${}进行参数传入的时候需要将其使用Tick反引号`包裹

1.1 script setup

script setup标签内的代码

// 9. 侦听器 watch
const todoId = ref(1)
const todoData = ref(null)
console.log(`${
     todoId.value}`)

// 根据todoId获取todoData的数据
async function fetchData(){
   
  todoData.value = null
  // fetch中的链接地址,因为有${}这种语法,所以使用的是Tick键反引号`符号,而不是单引号或者双引号
  const res = await fetch(`https://jsonplaceholder.typicode.com/todos/${
     todoId.value}`)
  todoData.value = await res.json()
}

// 执行函数
fetchData()

// 执行函数侦听器,id更新,数据就更新
watch(todoId, fetchData)

// const count9 = ref(0)
// watch(count9, (newCount9)=>{
   
//   console.log('new count9 is : ${nweCount9}')
// })

1.2 template

template标签内的代码

  <!-- 9.  -->
  <div>
    <h2>9. 侦听器 watch</h2>
    <p id="p-9">Todo id: {
  { todoId }}</p>
    <button id="btn-9" @click="todoId++" :disabled="!todoData">Fetch next todo</button>
    <p id="p-92" v-if="!todoData">Loading...</p>
    <pre id="pre-9" v-else>{
  { todoData }}</pre>
  </div>

1.3 style scoped

style scoped标签内的代码

/* 9.  */
#p-9{
  height: 30px;
  width: 200px;
  text-align: center;
  border-radius: 2px;
  background-color: slategray;
  font-size: 20px;
}
#btn-9{
  height: 30px;
  width: 200px;
  text-align: center;
  border-radius: 15px;
  background-color: orchid;
  font-size: 20px;
}

#p-92{
  height: 400px;
  width: 800px;
  text-align: center;
  border-radius: 15px;
  background-color: green;
  font-size: 20px;
}

#pre-9{
  height: 400px;
  width: 800px;
  text-align: center;
  border-radius: 15px;
  background-color: green;
  font-size: 20px;
}

1.4 页面效果

控制台npm run dev启动项目,访问服务页面http://localhost:5173/
查看页面效果

点击Fetch next todo按钮进行数据更新,通过更新todoId,触发调用随id改变的数据

2. 组件

Vue中除了单组件Single-File Component使用外还可以嵌套组件
一般的Vue应用往往由嵌套组件创建而成

父组件在模板中渲染另一个组件作为子组件,使用子组件只需在父组件中导入即可
导入方式

import 自定义的子组件名 from '子组件文件路径'

一般情况下,在src下创建类似App.vue的子组件,然后在App.vue中引入使用
以下为使用子组件的案例

2.1 子组件创建

在src文件夹下创建一个名为ChildComp.vue的子组件文件

子组件内容如下

<script setup>
    
</script>

<template>
    <div>
        <p>Hello World!</p>
    </div>
</template>

然后就是在主组件App.vue中引入使用子组件,以下代码为在App.vue中编写

2.2 script setup

script setup标签内的代码

// 10. 组件
//在文件夹中编写vue组件文件,然后在这里引入
import ChildComp from './ChildComp.vue'

2.3 template

template标签内的代码

  <!-- 10.  -->
  <div>
    <h2>10. 组件</h2>
    <ChildComp id="c-10"/>
  </div>

2.4 style scoped

style scoped标签内的代码

/* 10.  */
#c-10{
  height: 80px;
  width: 400px;
  text-align: center;
  border-radius: 15px;
  background-color: teal;
  font-size: 40px;
  font-family: 'Courier New';
}

2.5 页面效果

控制台npm run dev启动项目,访问服务页面http://localhost:5173/
查看页面效果,子组件中的内容为Hello World!,在主组件中引入子组件,标签中不写任何内容,页面也会展示子组件中的内容

3. Props

动态数据接收
子组件可通过props从父组件接收动态数据

在js中声明props
defineProps()是一个编译时宏,无需导入
声明props后,props就可以在子组件的模板中使用,通过defineProps()所返回的对象在js中访问
父组件可以声明标签来传递props
如果要传递动态值,可使用v-bind

3.1 子组件创建

在src文件夹下创建子组件CildCompProps.vue

子组件中代码如下

<script setup>
    // defineProps()是编译时宏,无需导入,
    //一旦声明,msg参数就可以在子组件模板中使用,通过defineProps所返回的对象在js中访问
    const props = defineProps({
        msg:String
    })
</script>

<template>
    <div>
        {
  { msg || 'No props passed yet' }}
    </div>
</template>

接下来回到主组件App.vue中引用子组件,以下代码均为App.vue中编写

3.2 script setup

script setup标签内的代码

// 11. Props 
//动态数据接收,从父组件接收动态数据到子组件,现在子组件中声明
import ChildCompProps from './ChildCompProps.vue'
const greeting = ref('Hello from parent')
// defineProps()

3.3 template

template标签内的代码

  <!-- 11.  -->
  <div>
    <h2>11. Props</h2>
    <!-- 动态绑定 -->
    <ChildCompProps id="c-11" :msg="greeting" />
  </div>

3.4 style scoped

style scoped标签内的代码

/* 11.  */
#c-11{
  height: 200px;
  width: 400px;
  text-align: center;
  border-radius: 15px;
  background-color: chocolate;
  font-size: 40px;
  font-family: 'Courier New';
}

3.5 页面效果

控制台npm run dev启动项目,访问服务页面http://localhost:5173/
查看页面效果,子组件中的msg变量是通过props将js中greeting的内容绑定过来

4. 代码示例

以上示例的代码已打包上传到CSDN资源库,可自行下载获取示例代码
下载地址:Vue watch 组件 Props 语法示例演示代码

5. 项目demo

本文示例代码都是基于vite构建的vue3项目编写,项目demo也已上传CSDN资源库
下载地址:Vue 基于vite构建vue3项目 以及基础语法演示
下载后如想正常运行项目,需先有node环境,可根据文章开始的链接进行下载安装node环境,以及配置node环境变量


感谢阅读,祝君暴富!


原文链接: https://hanshan.blog.csdn.net//article/details/140498433

标签: #VUE 61 #软件开发 1171
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.