Setup函数

article/2025/10/10 10:29:31

Setup  vue 3.0

  •  setup是一个新的组件选项,作为组件中使用组合API的起点。 
  • 从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行。
  • 这就意味着在setup函数中this 还不是组件实例,this此时是undefined
  • 在模版中需要使用的数据和函数,需要在setup返回。  

    <template><div class="container"><h1 @click="say()">{{msg}}</h1></div>
    </template>
    <script>
    export default {setup () {console.log('setup执行了')console.log(this)// 定义数据和函数const msg = 'hi vue3'const say = () => {console.log(msg)}return { msg , say}},beforeCreate() {console.log('beforeCreate执行了')console.log(this)}
    }
    </script>

    总结:setup组件初始化之前执行,它返回的数据和函数可在模版使用

Setup  vue 3.2

script setup 语法糖

<script setup></script>

1. 属性和方法无需返回,直接使用

在添加了setup的script标签中,我们不必声明和方法,这种写法会自动将所有顶级变量、函数,均会自动暴露给模板(template)使用 。

<template><div>// 调用方法<button @click='changeName'>name</button>  </div>
</template><script setup>
import { ref} from 'vue'const name= ref('Jerry')// 声明method方法const changeName = () => {name.value = 'Tom'}  
</script>

reactivecomputed, 也一样可以使用: 

<template><div>{{msg}}</div><div>{{obj.a}}</div><div>{{sum}}</div>
</template><script setup>
import { ref, reactive, computed } from 'vue'const msg = ref('hello vue3');const obj = reactive({a: 1,b: 2
})const sum = computed(() => {return obj.a + 3;
});
</script>

 2. 组件自动注册

<template><Child />
</template><script setup>
import Child from '@/components/Child.vue'
</script>

组合API-父子通讯  vue3.0

父传子:

<template><div class="container"><h1>父组件</h1><p>{{money}}</p><hr><Son :money="money" /></div>
</template>
<script>
import { ref } from 'vue'
import Son from './Son.vue'
export default {name: 'App',components: {Son},// 父组件的数据传递给子组件setup () {const money = ref(100)return { money }}
}
</script>
<template><div class="container"><h1>子组件</h1><p>{{money}}</p></div>
</template>
<script>
import { onMounted } from 'vue'
export default {name: 'Son',// 子组件接收父组件数据使用props即可props: {money: {type: Number,default: 0}},setup (props) {// 获取父组件数据moneyconsole.log(props.money)}
}
</script>

子传父:

<template><div class="container"><h1>父组件</h1><p>{{money}}</p><hr>
+    <Son :money="money" @change-money="updateMoney" /></div>
</template>
<script>
import { ref } from 'vue'
import Son from './Son.vue'
export default {name: 'App',components: {Son},// 父组件的数据传递给子组件setup () {const money = ref(100)const updateMoney = (newMoney) => {money.value = newMoney}return { money , updateMoney}}
}
</script>
<template><div class="container"><h1>子组件</h1><p>{{money}}</p><button @click="changeMoney">花50元</button></div>
</template>
<script>
export default {name: 'Son',// 子组件接收父组件数据使用props即可props: {money: {type: Number,default: 0}},// props 父组件数据// emit 触发自定义事件的函数setup (props, {emit}) {// 获取父组件数据moneyconsole.log(props.money)// 向父组件传值const changeMoney = () => {// 消费50元// 通知父组件,money需要变成50emit('change-money', 50)}return {changeMoney}}
}
</script>

扩展:

  • 在vue2.x的时候 .sync 除去v-model实现双向数据绑定的另一种方式
<Son :money='money' @update:money="fn"  />
<Son :money.sync='money'  />
  • 在vue3.0的时候,使用 v-model:money="money" 即可
<Son v-model:money="money" />

总结:

  • 父传子:在setup种使用props数据 setup(props){ props就是父组件数据 }
  • 子传父:触发自定义事件的时候emit来自 setup(props,{emit}){ emit 就是触发事件函数 }
  • 在vue3.0中 v-model 和 .sync 已经合并成 v-model 指令

组合API-父子通讯  vue3.2

因为没有了setup函数,那么props,emit怎么获取呢

setup script语法糖提供了新的API来供我们使用

defineProps

如果只是单纯在 template 里使用,那么其实就这么简单定义就可以了:

import { defineProps } from 'vue'defineProps(['name', 'userInfo', 'tags'])

如果 script 里的方法要拿到 props 的值,你也可以使用字面量定义:

const props = defineProps(['name', 'userInfo', 'tags'])console.log(props.name)

如果不显性的指定 prop 类型的话,很容易在协作中引起程序报错,所以跟我们平时定义 prop 类型时一样, Vue 会通过 instanceof 来进行 类型检查 。

使用这种方法,需要通过一个 “对象” 入参来传递给 defineProps,比如:

defineProps({name: {type: String,required: false,default: 'Petter',},userInfo: Object,tags: Array,
})

父传子:

<template><div class="container"><h3>我是父组件</h3><Son :name="name"></Son></div>
</template><script setup>import Son from "./Son"import {ref} from "vue"let name = ref("张三")
</script>

子组件代码:

<template><div>我是子组件{{name}} </div>
</template><script setup>import {defineProps} from "vue"defineProps({name:{type:String,default:"我是默认值"}})
</script>

defineEmits

defineEmit 也是一个方法,它接受的入参格式和标准组件的要求是一致的。

由于 emit 并非提供给模板直接读取,所以需要通过字面量来定义 emits,最基础的用法也是传递一个 string[] 数组进来,把每个 emit 的名称作为数组的 item 。

重复定义的话,事件就会不生效。

// 获取 emit
const emit = defineEmit(['chang-name'])// 调用 emit
emit('chang-name', 'Tom')

子传父:

<template><div>我是子组件{{name}}<button @click="ziupdata">按钮</button></div>
</template><script setup>import {defineEmits} from "vue"//自定义函数,父组件可以触发const em=defineEmits(["updata"])const ziupdata=()=>{em("updata","我是子组件的值")}</script>

父组件代码:

<template><div class="container"><h3>我是父组件</h3><Son @updata="updata"></Son></div>
</template><script setup>import Son from "./Son"const updata = (data) => {console.log(data); //我是子组件的值}
</script>

defineExpose

  • 在标准组件写法里,子组件的数据都是默认隐式暴露给父组件的,但在 script-setup 模式下,所有数据只是默认 return 给 template 使用,不会暴露到组件外,所以父组件是无法直接通过挂载 ref 变量获取子组件的数据。
  • 如果要调用子组件的数据,需要先在子组件显示的暴露出来,才能够正确的拿到,这个操作,就是由 defineExpose 来完成。 
<template><div class="list-card">这是子组件</div>
</template>
<script setup>import { defineExpose, reactive, ref } from 'vue'let sonNum = ref(0)let sonName = reactive({name: '小明'})defineExpose({sonNum,sonName})
</script>

父组件代码:

<template><List ref="sonRef"></List><button @click="getSonData">获取子组件暴漏的值</button>
</template>
<script setup>import List from '../components/list.vue'import { ref } from 'vue'const sonRef = ref()function getSonData() {console.log('子组件中ref暴漏的数值', sonRef.value.sonNum) // 子组件中ref暴漏的数值 0console.log('子组件中reactive暴漏的字符串', sonRef.value.sonName.name) // 子组件中reactive暴漏的字符串 小明}
</script>

vue指令变化

v-text,v-html,v-show,v-on,v-bind,v-slot,v-pre,v-cloak,v-once,v-is都和之前用法一样

v-if  v-for 指令

vue3.0中 

 vue3.2中

 v-memo 指令

 v-memo 是一个vue3.2 新增的自定义指令,用于提升渲染性能。

记忆模板的子树(子组件或者子元素),用数组存储,被记忆的在下次虚拟dom渲染的时候如果没有发生过任何改变,则跳过这个子组件或子元素,不会触发更新渲染

<div ref="parent"  v-memo="[componentA, componentB]"><!-- 倘若被记忆的 componentA和componentB 其中一个或全部没有任何更改,则生成这个parent节点不会触发内部节点的更新--><componentA /><componentB />
<div />

vue3.x中不支持filters过滤器的解决方法

在3.x中,过滤器被删除,不再受支持。相反,我们建议用方法调用或计算属性替换它们。

 使用计算属性


http://chatgpt.dhexx.cn/article/NmjbMCx2.shtml

相关文章

setup factory使用方法(转)

推荐使用“Setup Factory ”&#xff0c;它是一个强大的安装程序制作工具。提供了安装制作向导界面&#xff0c;即使你对安装制作不了解&#xff0c;也可以生成专业性质的安装程序。可建立快捷方式&#xff0c;也可直接在Windows 系统的Register加入内容&#xff0c;还能在Win.…

安装包制作工具 SetupFactory 使用详解

Setup Factory是一个强大的安装程序制作工具。提供了安装制作向导界面&#xff0c;即使你对安装制作不了解&#xff0c;也可以生成专业性质的安装程序。可建立快捷方式&#xff0c;也可直接在 Windows 系统的注册表加入内容&#xff0c;还能在 Win.ini 和 System.ini 内加入设定…

1、setup

setup函数的两种返回值 1、若返回一个对象&#xff0c;则对象中的属性&#xff0c;放在&#xff0c;在模板中均可以直接使用&#xff08;重点关注&#xff09; <template><div class"setup"><div>姓名&#xff1a;{{name}}</div><div>…

使用Setup Factory 给应用程序打包

1.这几天闲得慌&#xff0c;突然又想着怎么给生成的exe打包成安装包&#xff0c;好久以前学着用InstallShield打包&#xff0c;学起来还真是麻烦&#xff0c;索性放弃了&#xff0c;这次就直接想找个简单好用的&#xff0c;最后选择了Setup Factory –》这里是Setup Factory v…

Setup Factory安装结束自动启动程序

用Setup Factory制作安装程序时&#xff0c;怎么实现制作出的程序安装时自动运行安装程序里的某个程序或脚本&#xff1f; 例如&#xff1a;现在要使用Setup Factory 制作一个安装程序&#xff0c;安装程序包里有一个exe需要在安装结束时运行它&#xff0c;以便我们把开发出的程…

安装setuptools

使用setuptools安装第三方插件&#xff0c;如何安装setuptools恩。一样的方法。 http://blog.csdn.net/DongGeGe214/article/details/52199439 下载setuptools源码setuptools-25.2.0.tar.gz 地址&#xff1a;https://pypi.python.org/pypi/setuptools 这是一个压缩文件&#x…

教你玩转 Setup factory 7.0

作品做到一定阶段了&#xff0c;也尝试着生成exe文件去运行&#xff0c;可是当我们将exe运行程序移到别的电脑或者其他地方时&#xff0c;就不能正常的运行了。后来想到很多软件都是需要我们安装才能用&#xff0c;所以网上一查&#xff0c;加上同学老师的点拨&#xff0c;我找…

使用Setup Factory如何制作程序安装包

步骤一&#xff1a;自己网上下载Setup Factory工具并安装 可下载地址&#xff08;若时间比较久网站不可用&#xff0c;就自己在网上找一下下载地址&#xff09;&#xff1a;setup factory中文版下载-setup factory汉化版(安装包制作工具)下载v9.5.3 正式版-极限软件园​​​​…

Setup Factory打包教程整合

一些简单的过程就不详细写了&#xff0c;就写一些可能会遇到的问题。 我使用的是Setup Factory 9.0.3.0 汉化版&#xff0c;资源地址&#xff1a; https://download.csdn.net/download/woaishapi/7789171 这个是我参考的打包教程&#xff1a; https://dominick-li.blog.csdn.ne…

安装包制作工具 SetupFactory使用 详解

Setup Factory 是一个强大的安装程序制作工具。提供了安装制作向导界面&#xff0c;即使你对安装制作不了解&#xff0c;也可以生成专业性质的安装程序。可建立快捷方式&#xff0c;也可直接在 Windows 系统的注册表加入内容&#xff0c;还能在 Win.ini 和 System.ini 内加入设…

SetupFactory 制作软件安装包使用详解

文章目录 1.新建工程2.软件信息填写3.选择平台4.源文件夹5.窗口设置6. 主题选择7. 选择语言8. 选择依赖项9 功能选择10 设置主程序文件11 设置属性12. 附加步骤&#xff08;主题修改&#xff09;12.1 页面顺序排列12.2 页面编辑12.3 删除界面12.4 添加界面12.4.1 Welcome to Se…

下载安装setuptools

复制下面这段代码存为python格式&#xff0c;运行&#xff0c;可自动下载 #!/usr/bin/env python""" Setuptools bootstrapping installer.Maintained at https://github.com/pypa/setuptools/tree/bootstrap.Run this script to install or upgrade setuptools…

Setup Factory安装及程序安装包制作教程

阅读前提&#xff1a; 1.已制作好exe之类的可运行文件 一、软件安装 1、下载软件&#xff0c;这里以setup-factory 9.0.3.0.exe为例 下载地址&#xff1a;https://download.csdn.net/download/u010188178/10652645 2、安装该软件 3、汉化&#xff08;如果有这个需要的话&a…

C#程序打包工具SetupFactory入门使用

SetupFactory是一款能够用于工程向导、自定义对话框、生成MD5序列化以及两百多个功能函数的脚步编辑器、授权支持等等众多的特性。总体来说使用起来比较简单&#xff0c;在这里俺就介绍一下如何打包C#项目&#xff0c;至于其他使用如果有时间后续俺会再介绍的。 在这里俺使用的…

安装包制作工具 SetupFactory 详解

安装包制作工具 SetupFactory 详解 转载自&#xff1a;https://www.cnblogs.com/lidabo/p/9809757.html Setup Factory 是一个强大的安装程序制作工具。提供了安装制作向导界面&#xff0c;即使你对安装制作不了解&#xff0c;也可以生成专业性质的安装程序。可建立快捷方式&…

高等数学学习笔记——第四十八讲——微分方程模型与基本概念

1. 问题引入——方程的出现是算术走向代数的重要标志&#xff08;代数的任务就是解方程&#xff09; 如&#xff0c;鸡兔同笼问题&#xff0c;用代数方程来解决就很简单。 2. 微分方程是一种数学模型。 数学建模&#xff1a;用数学的语言和方法&#xff0c;通过对实际问题的抽…

Python小白的数学建模课-09 微分方程模型

1. 微分方程 1.1 基本概念 微分方程是描述系统的状态随时间和空间演化的数学工具。物理中许多涉及变力的运动学、动力学问题&#xff0c;如空气的阻力为速度函数的落体运动等问题&#xff0c;很多可以用微分方程求解。微分方程在化学、工程学、经济学和人口统计等领域也有广泛…

微分方程模型(一)

人口模型&#xff1a; 量化人口增长的趋势 1.Malthus 模型 模型假设&#xff1a; &#xff08;i&#xff09;设x(t)表示t时刻的人口数&#xff0c;且x(t)连续可微。 &#xff08;ii&#xff09;人口的增长率r 是常数&#xff08;增长率出生率—死亡率&#xff09;。 &#…

【数学建模】9 微分方程模型建模方法及实例

目录 1 微分方程2 微分方程解决的主要问题3 微分方程模型4 微分方程解决问题的一般步骤第一步第二步第三步 5 微分方程举例6 经典的微分方程模型7 课后习题 1 微分方程 &#xff08;1&#xff09;概念&#xff1a;微分方程是含有函数及其导数的方程&#xff0c;如果方程组只含…