vue3中setup的两个参数 props,context (attrs,emit,slots),vue3中的双向数据绑定自定义事件emit和v-model

这篇具有很好参考价值的文章主要介绍了vue3中setup的两个参数 props,context (attrs,emit,slots),vue3中的双向数据绑定自定义事件emit和v-model。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

setup函数

props参数

案例

第一种写法(用setup函数的方式):

 第二种方法(语法糖形式即setup写入script标签中)也可以传值,

 context (attrs,emit,slots)

vue3中的双向数据绑定自定义事件emit和v-model

emit自定义事件

v-model


setup函数

有两个参数分别是props,context

 setup(props,context){
		  console.log(props,context)
	  }

props参数

props参数是一个对象,里面存有外部传入的属性

案例

第一种写法(用setup函数的方式):

父组件(这种写法父组件必须写components命名)

<template>
	<div>
		<h1>这是父组件的name:{{obj.name}}</h1>
		<Box :age="obj.age" :name="obj.name"></Box>
	
	</div>
</template>

<script>
	import Box from "./Box.vue" //引入子组件
	
	import { reactive } from 'vue';
	
	export default{
		components:{  //这种写法必须命名
			Box
		},
		setup(){
			let obj=reactive({name:"小狮子",age:18})
			return {obj}
		}

	}
	 
</script>

子组件

<template>
	<div>
		<h1>33</h1>
		<h2>这是子组件的age:{{age}}</h2>
		<h3>这是子组件的name:{{name}}</h3>
	</div>
</template>

<script>
	export default{
		props:["age",'name'],
		setup(props,context) {
			console.log(props,666) //打印props属性
		}
	}
</script>

此时效果图为:

<script setup=说明传值成功

 且控制台打印:

<script setup=说明props参数为一个proxy对象,里面存有父组件传入的属性值

 第二种方法(语法糖形式即setup写入script标签中)也可以传值,

父组件:

<template>
	<div>
		<h1>这是父组件的name:{{obj.name}}</h1>
		<Box :age="obj.age" :name="obj.name"></Box>
	
	</div>
</template>

<script setup>
	import Box from "./Box.vue"
    import { reactive } from 'vue';
      let obj=reactive({name:"小狮子",age:18})
</script>

子组件(此时需要自己在script标签中将值传进来用 defineProps([ ])  

<template>
	<div>
		<h1>33</h1>
		<h2>这是子组件的age:{{obj.age}}</h2>
		<h3>这是子组件的name:{{obj.name}}</h3>
	</div>
</template>

<script setup>
     let obj=defineProps(["age","name"])
	 // console.log(props,222)
</script>

效果一样

<script setup=

 context (attrs,emit,slots)

context:上下文对象

  • attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性

  • slots: 写入插槽的内容

  • emit: 自定义事件函数

	  setup(props,context){
		  console.log(context.attrs,context.emit,context.slots)
	  }

vue3中的双向数据绑定自定义事件emit和v-model

emit自定义事件

下面只阐述语法糖形式的内容即setup写入script标签中的写法

注意:

    defineEmit  是vue3.2版本之前的用法
    useContext 3.2 但是废弃了 useContext函数的返回值有{emit,attr,}
    vue3.2版本之后用defineEmits

案例:子组件向父组件传值

父组件代码

<template>
	<div>
		<h1>这是父组件的name:{{obj.name}}</h1>
		<!-- 绑定一个自定义事件 -->
		<Box :age="obj.age" :name="obj.name" @mychange="fn"></Box>
	
	</div>
</template>

<script setup>
	import Box from "./Box.vue"
    import { reactive } from 'vue';
      let obj=reactive({name:"小狮子",age:18})
	  
	  let fn=(arg1,arg2)=>{ 
		  obj.age=arg1
		  console.log("这是父组件的自定义事件","这是传入的值:",arg1,arg2)
	  }
</script>

子组件(defineEmits可以不引入,3.2版本之后自带

如果不用setup语法糖,用的setup函数中的参数context使用emit,即cotext.emit去使用

<template>
	<div>
		<h1>33</h1>
		<h2>这是子组件的age:{{obj.age}}</h2>
		<h3>这是子组件的name:{{obj.name}}</h3>
		<button @click="fn1">触发自定义事件</button>
	</div>
</template>

<script setup>
	import {defineEmits} from "vue" //可以不引入
	
    let obj=defineProps(["age","name"])
	  
	let emit=defineEmits() //如果用的setup函数则是用cotext.emit去使用
	  
    let fn1=()=>{
		
		emit("mychange",11,22) //可以传参 //用setup函数则为context.emit("mychange",11,22)
	}
	  
</script>

效果图

<script setup=

 点击按钮后界面后控制台的内容为

<script setup=<script setup=

成功触发了自定义事件,还可以得出子组件向父组件传值可以用自定义事件

v-model

由上边的emit得知,v-model也是大致一样

//父组件
<HomeView v-model:title="bookTitle"></HomeView>

//子组件
1.接收参数:props:["title"] (在语法糖中则是用defineProps(["title"]))
2.定义事件:emits: ['update:title'] 必须写update
3.触发事件:this.$emit("update:title","子组件传递给父组件的值")

重点举例:多个 v-model 绑定

如:

<MyVmodel v-model="msg" v-model:msg2="msg2" v-model:msg3="msg3"></MyVmodel> 

案例:

父组件

<template>
	<div>
		<h1>这是父组件的msg:{{msg1}}--{{msg2}}--{{msg3}}</h1>
		<!-- 绑定一个自定义事件 -->
		<Box :age="obj.age" :name="obj.name" 
v-model:msg1="msg1" v-model:msg2="msg2" v-model:msg3="msg3"></Box>
	
	</div>
</template>

<script setup>
	import Box from "./Box.vue"
    import { reactive,ref} from 'vue';
      let obj=reactive({name:"小狮子",age:18})
	  
	  let msg1=ref("大牛")
	  let msg2=ref("大狮")
	  let msg3=ref("大羊")
</script>

子组件

<template>
	<div>

		<h2>这是子组件的age:{{obj.age}}</h2>
		<h3>这是子组件的name:{{obj.name}}</h3>
		<h4>这是v-model传入的值:{{obj.msg1}}--{{obj.msg2}}--{{obj.msg3}}</h4>
		<button @click="fn1">改变msg1</button>
		<button @click="fn2">改变msg2</button>
	</div>
</template>

<script setup>
	import {defineEmits} from "vue"
	
    let obj=defineProps(["age","name","msg1","msg2","msg3"])
	  
	let emits=defineEmits()
	  
    let fn1=()=>{		
		emits("update:msg1","小牛") //写多个传参,只生效第一个
	}
	let fn2=()=>{
		emits("update:msg2","小狮") //写多个传参,只生效第一个
	}
	  
</script>

效果图

<script setup=

 当我们分别点击两个按钮时:

<script setup=

 <script setup=

 说明双向数据绑定成功文章来源地址https://www.toymoban.com/news/detail-688922.html

到了这里,关于vue3中setup的两个参数 props,context (attrs,emit,slots),vue3中的双向数据绑定自定义事件emit和v-model的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 中使用 props, emits 并指定其类型与默认值

    前言 本文主要描述 vue3 中 defineProps 与 defineEmits 分别在 JS 环境和 TS 环境中的使用方法。 defineProps 的使用 defineProps 在使用的时候无需引入,默认是全局方法。 在 js 开发的 vue3 项目中使用 js 环境中使用与 vue2 的使用方法类似,只是选项式 API 换成了组合式 API。定义 props 类型

    2024年02月05日
    浏览(28)
  • 【vue3 之 emits & $emit() 讲解 】监听子组件事件、emit事件验证、options写法、composition setup写法

    前言:不懂在父组件里对子组件 @xxxx 声明自定义事件,就不用看本篇文章了。本篇对此内容不做任何说明。这是与 emits 结合使用的必备知识! 场景说明: 组件功能封装:         组件封装了一系列 emit 事件,并返回数据、回调函数等,或单纯执行某个操作后,触发父组

    2023年04月09日
    浏览(41)
  • Vue3 setup tsx 子组件向父组件传值 emit

    需求: Vue3 setup 父组件向子组件传值,子组件接收父组件传入的值;子组件向父组件传值,父组件接收的子组件传递的值。 父组件: parent.tsx : 子组件: TotalPreview.tsx : 页面效果:

    2024年02月13日
    浏览(29)
  • vue3的setup 语法糖中获取slot 插槽的dom对象

    最近使用vue3开发项目,需要封装一个无限滚动的组件,使用scroll组件内置插槽接受模板的方式,所以需要在scroll组件内获取到模板渲染后dom元素的宽高。 但是setup语法糖是组件生命周期的beforeCreate和created中,而且经过测试,在mounted函数中的el属性也是null,所以得出结论模板

    2024年02月15日
    浏览(40)
  • vue3组合式api <script setup> props 父子组件的写法

    父组件传入子组个的变量, 子组件是无法直接修改的, 只能通过 emit的方式, 让父组件修改, 之后子组件更新 父组件的写法没有变, 子组件的写法就有很大的变化了

    2024年02月10日
    浏览(30)
  • Vue3之setup参数介绍

    使用setup函数时,它将接受两个参数: props context 让我们更深入地研究如何使用每个参数 setup函数中的第一个参数是props。正如在一个标准组件中所期望的那样,setup函数中的props是响应式的,当传入新的prop时,它将被更新。 Warning :因为 props 是响应式的,你不能使用ES6解构,

    2024年02月16日
    浏览(21)
  • Vue前端框架10 组件的组成、组件嵌套关系、组件的注册方式、组件传递数据(props $emit)、数组传递多种数据类型、组件传递props校验、组件事件

    组件最大的优势就是可复用性 通常将组件定义在.vue中,也就是SFC单文件组件 组件的基本组成: 组件允许我们将UI划分为独立的、可重用的部分,并且对每个部分单独思考 实际应用中组件常常被组件成层层嵌套的树状结构 Vue组件使用前要注册,注册有两种方式:全局注册和

    2024年02月09日
    浏览(31)
  • Vue.js组件精讲 第2章 基础:Vue.js组件的三个API:prop、event、slot

    如果您已经对 Vue.js 组件的基础用法了如指掌,可以跳过本小节,不过当做复习稍读一下也无妨。 一个再复杂的组件,都是由三部分组成的:prop、event、slot,它们构成了 Vue.js 组件的 API。如果你开发的是一个通用组件,那一定要事先设计好这三部分,因为组件一旦发布,后面

    2024年04月16日
    浏览(64)
  • Vue组件的嵌套关系;父组件传递子组件props;子组件传递给父组件$emit;自定义事件;案例

    前面将所有的逻辑放到一个App.vue中: 在之前的案例中,只是创建了一个组件App; 如果一个应用程序将所有的逻辑都放在一个组件中,那么这个组件就会变成非常的臃 肿和难以维护; 所以组件化的核心思想应该是对组件进行拆分,拆分成一个个小的组件; 再将这些组件组合

    2024年02月13日
    浏览(31)
  • 初学Vue(全家桶)-第n天(vue2):关于v-bind=“$attrs“、v-bind=“$props“ 和v-on=“$listeners“的使用

    1、 v-bind=\\\"$props\\\" : 可以将父组件的所有props下发给它的子组件,子组件需要在其props:{} 中定义要接受的props。 2、 v-bind=\\\"$attrs\\\" : 将调用组件时的组件标签上绑定的 非props 的属性(class和style除外)向下传递。在 子组件中应当添加inheritAttrs: false (避免父作用域的不被认作props的特性绑

    2024年02月04日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包