1,父传子


子组件中定义props字段,类型为数组(如果需要限制字段值类型,也可以定义为对象的形式)。如下图的例子,父组件挂载子组件HelloWorld,在组件标签上给title赋值,子组件HelloWorld定义props,里面有一个值是title,这样子组件就可以使用父组件的值了。

父组件

<template>
<div>
<HelloWorld :title="msg" />
</div>
</template> <script>
import HelloWorld from "../components/HelloWorld.vue"; export default {
name: "Home",
data() {
return {
msg: "搜索音乐",
};
},
components: {
HelloWorld,
},
};
</script>

子组件

<template>
<div class="hello">
<h1>{{ title }}</h1>
</div>
</template> <script>
export default {
name: "HelloWorld",
props:["title"],
data() {
return {};
},
};
</script>

2,子传父


子传父,需要在子组件中触发一个事件,在事件中,调用$emit('父组件的方法名', '传递的值'),然后在父组件中,通过自定义事件接收传递过来的值。

子组件

<template>
<div class="hello">
<h1 @click="add">{{ title }}</h1>
</div>
</template> <script>
export default {
name: "HelloWorld",
props: ["title"],
data() {
return {
age:18
};
},
methods: {
add(){
this.$emit("childEvent", this.age);
}
},
};
</script>

父组件

<template>
<div>
<HelloWorld @childEvent="parentEvent" :title="msg" />
</div>
</template> <script>
import HelloWorld from "../components/HelloWorld.vue"; export default {
name: "Home",
data() {
return {
msg: "搜索音乐",
};
}, methods: {
parentEvent(e) {
console.log(e);
},
},
components: {
HelloWorld,
},
};
</script>

3,兄弟组件传值


1,先新建一个bus.js文件,在bus.jsnew一个Vue实例,充当传输数据的中间层。

import Vue from 'vue';
export default new Vue;

2,在组件A中引入bus.js,通过bus.$emit('事件名','参数')传递参数

<template>
<div class="hello">
<h1 @click="add">{{ title }}</h1>
</div>
</template> <script>
import bus from "../publicFn/bus.js"; export default {
name: "HelloWorld",
props: ["title"],
data() {
return {
age:18
};
},
methods: {
add(){
bus.$emit("childEvent", this.age);
}
},
};
</script>

3,在B组件mounted周期中使用$on('事件名', function(){})接收

<template>
<div id='swiper'>
<button>我是按钮</button>
</div>
</template> <script> import bus from "../publicFn/bus.js"; export default {
name:'Swiper',
data (){
return { }
},
mounted(){
bus.$on("childEvent", (e) => {
console.log(e)
})
}
}
</script>

4,父组件使用子组件的数据和方法


1,在子组件标签上写上ref属性

2,父组件通过this.$refs.id.方法名或者this.$refs.id.属性名的方式可以访问子组件。

父组件

<template>
<div>
<HelloWorld :title="msg" ref="hello" />
<button @click="parentEvent">我是父亲</button>
</div>
</template> <script>
import HelloWorld from "../components/HelloWorld.vue"; export default {
name: "Home",
data() {
return {
msg: "搜索音乐",
};
}, methods: {
parentEvent() {
this.$refs.hello.add();
console.log(this.$refs.hello.age);
},
},
components: {
HelloWorld
},
};
</script>

子组件

<template>
<div class="hello">
<h1>{{ title }}</h1>
</div>
</template> <script>
export default {
name: "HelloWorld",
props: ["title"],
data() {
return {
age:18
};
},
methods: {
add(){
console.log("我是子组件");
}
},
};
</script>

5,子组件使用父组件的数据和方法


在子组件中,可以使用$parent访问其上级父组件的数据和方法,如果是多重嵌套,也可以使用多层$parent

父组件

<template>
<div>
<HelloWorld :title="msg" ref="hello" />
</div>
</template> <script>
import HelloWorld from "../components/HelloWorld.vue"; export default {
name: "Home",
data() {
return {
msg: "搜索音乐",
};
}, methods: {
parentEvent() {
console.log("我是父组件的方法");
},
},
components: {
HelloWorld
},
};
</script>

子组件

<template>
<div class="hello">
<h1 @click="add">{{ title }}</h1>
</div>
</template> <script>
export default {
name: "HelloWorld",
props: ["title"],
data() {
return {
age:18
};
},
methods: {
add(){
console.log(this.$parent.msg)
this.$parent.parentEvent();
}
},
};
</script>

6,Vuex传值


Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。一般小项目不需要用到。

6.1,定义store

import Vue from "vue";
import Vuex from "vuex"; Vue.use(Vuex); export default new Vuex.Store({
state: {
school: "清华大学",
a:"nice"
},
getters: {
returnVal(state) {
return state.school + state.a;
},
},
mutations: {
changeSchool(state, val) {
state.school = val;
console.log('修改成功');
},
},
actions: {},
modules: {}
});

6.2,挂载

import Vue from 'vue';
import App from './App.vue';
import router from "./router";
import store from "./store";
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
import publicFn from "./publicFn/publicFn"; Vue.config.productionTip = false const url = process.env.VUE_APP_URL;
Vue.prototype.$url = url;
Vue.prototype.$publicFn = publicFn; Vue.use(ElementUI); new Vue({
router,
store,
render: h => h(App),
}).$mount('#app')

6.3,使用

<template>
<div class="hello">
<h1 @click="add">{{ title }}</h1>
</div>
</template> <script>
export default {
name: "HelloWorld",
props: ["title"],
data() {
return {
age:18
};
},
methods: {
add(){
console.log(this.$store.state.school);//获取值
//this.$store.commit('changeSchool', '北京大学');//修改值
// console.log(this.$store.getters.returnVal)//获取过滤后的值
}
},
};
</script>

7,路由传值


7.1 通过query传值

注意:该方式刷新页面参数不丢失,并且会在地址栏后将参数显露,http://localhost:9000/#/conter?id=10086&name=%E9%B9%8F%E5%A4%9A%E5%A4%9A

页面A

<template>
<div>
<HelloWorld :title="msg" ref="hello" />
<button @click="parentEvent">跳转</button>
</div>
</template> <script>
import HelloWorld from "../components/HelloWorld.vue"; export default {
name: "Home",
data() {
return {
msg: "搜索音乐",
};
}, methods: {
parentEvent() {
this.$router.push({
path:"/conter",
name:'conter',
query:{
id:10086,
name:"鹏多多"
}
})
},
},
components: {
HelloWorld
},
};
</script>

页面B

<template>
<div id='conter'> </div>
</template> <script> export default {
name:'conter',
data (){
return { }
},
created (){
console.log(this.$route.query.id, this.$route.query.name);
},
}
</script>

7.2 通过params传值

注意:该方式刷新页面参数会丢失,可以接收后存在sessionStorage

A页面

<template>
<div>
<HelloWorld :title="msg" ref="hello" />
<button @click="parentEvent">跳转</button>
</div>
</template> <script>
import HelloWorld from "../components/HelloWorld.vue"; export default {
name: "Home",
data() {
return {
msg: "搜索音乐",
};
}, methods: {
parentEvent() {
this.$router.push({
path:"/conter",
name:"conter",
params:{
id:10086,
name:"鹏多多"
}
})
},
},
components: {
HelloWorld
},
};
</script>

B页面

<template>
<div id='conter'> </div>
</template> <script> export default {
name:'conter',
data (){
return { }
},
created (){
console.log(this.$route.params.id, this.$route.params.name);
},
}
</script>

如果看了觉得有帮助的,我是@鹏多多,欢迎 点赞 关注 评论;

END

往期文章

个人主页

Vue的七种传值方式的更多相关文章

  1. Vue 常用三种传值方式

    Vue常用的三种传值方式: 父传子 子传父 非父子传值 引用官网一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消 ...

  2. 简述UIViewControl之间的七种传值方式~~~

    将自己学习到的UIViewControl之间传值的几种方式在这里做一下总结,希望童鞋们多多支持哈--- 一.正向传值方式 这种方式传值应该是最简单的方式,我们先来建立两个视图控制器暂且称为OneVie ...

  3. Vue中两种传值方式

    第一种:通过url传参,直接在地址后加? ,通过this.$route.query对象获取 第二种:通过路由传参,修改路由,通过this.$route.params对象获取

  4. Vue中常用的几种传值方式

    Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...

  5. iOS 页面间几种传值方式(属性,代理,block,单例,通知)

    第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...

  6. django之创建第7-6-第三种传值方式

    1.创建bar.html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  7. django之创建第7-5-第二种传值方式(time/1232/xiaodneg)

    1.修改views文件 def foo(request,myID,myName): t = loader.get_template("foo.html") user = {&quo ...

  8. 【转】vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  9. vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

随机推荐

  1. 【Linux】Linux介绍和安装 - 测试题

    第一部分测试题 Linux介绍和安装 测试题 做点练习题,巩固一下咯~ ~ _ 10 个选择题. 1.让我们选择开机时进哪个操作系统的软件叫什么? A. booter B. bootloader C. ...

  2. 【Git】2、Linux快速安装Git环境 & oh-my-zsh

    Linux快速安装Git环境 文章目录 Linux快速安装Git环境 1.Linux安装Git 2.安装zsh 3.安装oh-my-zsh 3.1.安装oh-my-zsh 3.2. 测试验证 4.小结 ...

  3. ELK一个优秀的日志收集、搜索、分析的解决方案

    1 什么是ELK? ELK,是Elastaicsearch.Logstash和Kibana三款软件的简称.Elastaicsearch是一个开源的全文搜索引擎.Logstash则是一个开源的数据收集引 ...

  4. charles安装使用乱码连手机等问题解决方案

    捣鼓半天终于安装好了,给大家分享下我的过程 1.安装, 正常网上安装即可,我安装了个有汉化包的,,推荐链接 安装方法下载破解版,安装即可 安装包地址:https://pan.baidu.com/s/1 ...

  5. Object level permissions support

    django-guardian (1.1.1+) - Object level permissions support. Home - Django REST framework https://ww ...

  6. ETL调优的一些分享(下)(转载)

    如在上篇文章<ETL调优的一些分享(上)>中已介绍的,ETL是构建数据仓库的必经一环,它的执行性能对于数据仓库构建性能有重要意义,因此对它进行有效的调优将十分重要.ETL业务的调优可以从若 ...

  7. Go for Pythonistas Go and the Zen of Python 禅

    Go for Pythonistas https://talks.golang.org/2013/go4python.slide#1 Things I don't like about Python ...

  8. FFT,NTT 笔记

    FFT 简介 FFT是干啥的?它是用来加速多项式乘法的.我们平时经常求多项式乘法,比如\((x+1)(x+3)=(x^2+4x+3)\).假设两个式子都是\(n\)项(不足的补0),那朴素的算法是\( ...

  9. codevs1700 施工方案第二季

    题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...

  10. 高性能缓存 Caffeine 原理及实战

    一.简介 Caffeine 是基于Java 8 开发的.提供了近乎最佳命中率的高性能本地缓存组件,Spring5 开始不再支持 Guava Cache,改为使用 Caffeine. 下面是 Caffe ...