Vue组件传值方式

在这个前端不断工程化的时代,组件之间的通信已经成为我们工作当中不可缺的一部分
组件传参呢也给我们带来不少好处: 1.如果有一个功能很多地方都会用到,写成一个组件就不用重复写这个功能
2.页面会简洁一些,更方便管控
接下来我给大家总结几种传参方式

1.父传子

首先在页面当创建两个组件,一个为父组件,一个为子组件
在这里插入图片描述

第二步:将子组件挂载到父组件当中去,并进行注册

<template>
	<div>
		   <Som></Som>
	</div>
</template>

<script>
	//将子组件挂在到父组件当中去
	import Som from '@/components/son.vue'
	export default {
		//注册组件
		components:{
			Som
		},
		data() {
			return {
              
			}
		}
	}
</script>

<style>
</style>

在子组件里面写个内容
在这里插入图片描述
看看页面展示
在这里插入图片描述
效果没有问题,内容可以正常显示

那我们主要做的是将父传子的方法进行一个实现,那父传子就是在父组件的子组件上面绑定一个属性,将父组件里面的内容传给子组件,子组件呢通过props进行接受,废话不多说,上代码

在这里插入图片描述
子组件通过props进行接受,并在页面上进行输出
在这里插入图片描述
效果如下
在这里插入图片描述
父传子呢就是这样的一个过程,里面最主要的是子组件通过props来进行接收

2.子传父

子传父方法就是在父组件的子组件中绑定一个事件,子组件通过this.$emit方法来触发父组件当中的事件
上代码

子组件
在这里插入图片描述
父组件

在这里插入图片描述

效果图如下

在这里插入图片描述

3.兄弟组件传参

非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果

导出一个空的vue实例
在这里插入图片描述
组件A
在这里插入图片描述

组件B
在这里插入图片描述

4.Vuex传参

vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值(兄弟组件下又有父子组件),或者大型spa单页面框架项目,页面多并且一层嵌套一层的传值,异常麻烦,用vuex来维护共有的状态或数据会显得得心应手,他的作用是将应用中的所有状态都放在一起,集中式来管理

首先在Store里面创建个index.js

在vuex里面有五个核心状态

state:存储数据的地方,它是一个对象
mutation:可以直接调用state里面的数据
action:调用mutation里面的方法进行异步操作
getters:类似于计算属性,对数据做一些逻辑性操作
module:将仓库分模块处理

上代码
在这里插入图片描述

调用

template>
	<div>
		 <!-- 调用 -->
		 <span>  {{this.$store.state.counter}}</span>
	</div>
</template>

5.全局变量

利用全局变量进行传参
在main.js里面进行一下全局注册

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false
//注册全局组件
import Commpont from '@/components/commpont.vue'
Vue.component(Commpont.name, Commpont)

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

那么在这个组件里面name属性上进行一个绑定

<template>
	  <div>
		   啦啦啦
	  </div>
	  
</template>

<script>
	export default{
		name:'Commpont',
		 data(){
			  return{
				  
			  }
		 }
	}
</script>

<style>
</style>

在需要调用的页面进行调用

<template>
	<div>
            <Commpont></Commpont>
	</div>
</template>

这样就可以显示内容啦

6.$parent传值

父组件

<template>
  <div>
    <h1>父组件</h1>
    <h-child></h-child>
  </div>
</template>
<script>
  // 引入子组件
  import HChild from './Child'
  export default {
    name: 'Parent',
    components: {
      HChild
    },
    data () {
      return {
        msg: 'data from parent'
      }
    },
    methods: {
      fun () {
        console.log('parent fun')
      }
    }
  }
</script>

子组件

<template>
  <div>
    <h1>子组件</h1>
    <button @click="showParent">调用父组件的数据和方法</button>
  </div>
</template>
<script>
  export default {
    name: 'Child',
    methods: {
      showParent () {
        // 获取到所有的子组件
        console.log(this.$parent)
        // 获取指定子组件中的指定数据
        console.log(this.$parent.msg)
        // 调用子组件的方法
        this.$parent.fun()
      }
    }
  }
</script>

7.sessionStorage传值

1.读取数据

采用setItem()方法存储
sessionStorage.setItem('testKey','这是一个测试的value值'); // 存入一个值
通过属性方式存储  
sessionStorage['testKey'] = '这是一个测试的value值';

2.读取数据

通过getItem()方法取值
sessionStorage.getItem('testKey'); // => 返回testKey对应的值
通过属性方式取值
sessionStorage['testKey']; // => 这是一个测试的value值

3.存取对象
sessionStorage也可存储Json对象:存储时,通过JSON.stringify()将对象转换为文本格式;读取时,通过JSON.parse()将文本转换回对象。

var userEntity = {
    name: 'tom',
    age: 22
};
// 存储值:将对象转换为Json字符串
sessionStorage.setItem('user', JSON.stringify(userEntity));
// 取值时:把获取到的Json字符串转换回对象
var userJsonStr = sessionStorage.getItem('user');
userEntity = JSON.parse(userJsonStr);
console.log(userEntity.name); // => tom

8.路由传值

对应的路由配置模块

<div class="examine" @click="insurance(2)">查看详情</div>

使用方法

methods:{
  insurance(id) {
       //直接调用$router.push 实现携带参数的跳转
        this.$router.push({
          path: `/particulars/${id}`,
        })
}

配对路由

{
     path: '/particulars/:id',
     name: 'particulars',
     component: particulars
   }

利用params接收

this.$route.params.id

9.promise传参

let fn = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject("ok");
  }, 1000);
});

fn.then().catch(console.log);       // 方式一
fn.then(console.log, console.log);  // 方式二
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue组件传值Vue.js中非常重要的一个概念,它涉及到父子组件之间的数据传递和通信。下面是一些常见的Vue组件传值面试题及其答案: 1. 请介绍Vue组件之间的父子组件传值方式。 答:Vue组件之间的父子组件传值方式有props和$emit。通过props可以将数据从父组件传递给子组件,子组件通过props接收数据。而$emit则是在子组件中触发一个自定义事件,并通过事件参数将数据传递给父组件。 2. 请介绍Vue组件之间的兄弟组件传值方式。 答:Vue组件之间的兄弟组件传值方式可以通过共享状态管理工具(如Vuex)或者事件总线来实现。使用共享状态管理工具可以在全局定义一个状态,兄弟组件通过读取和修改该状态来进行数据传递。而事件总线则是在Vue实例上定义一个事件中心,兄弟组件通过$emit和$on来进行事件的发布和订阅,从而实现数据传递。 3. 请介绍Vue组件之间的跨级组件传值方式。 答:Vue组件之间的跨级组件传值方式可以通过provide和inject来实现。父级组件通过provide提供数据,然后子孙级组件通过inject来注入数据。这样就可以实现跨级组件之间的数据传递。 4. 请介绍Vue组件之间的非父子组件传值方式。 答:Vue组件之间的非父子组件传值方式可以通过事件总线、Vuex或者localStorage等方式来实现。事件总线和Vuex的方式在前面已经介绍过了,而localStorage则是通过将数据存储在浏览器的本地存储中,然后在其他组件中读取该数据来实现非父子组件之间的数据传递。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值