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. 记一道C语言编程题(C语言学习笔记)

    题目如下 解答如下 #include <stdio.h> #include<math.h> double Mysqrt(double n) { return sqrt(n); ...

  2. 腾讯云COS对象存储占据数据容灾C位

    说到公有云容灾,大家首先想到的是云上数据备份. 然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求.如何确保云上业务的高可用.数据的高可靠,这对云厂商提出了新的挑战. 腾讯云作为全球领先 ...

  3. DockerFile关键字相关作用以及解释

    Dockerfile 关键字 作用 备注 FROM 指定父镜像 指定dockerfile基于那个image构建 MAINTAINER 作者信息 用来标明这个dockerfile谁写的 LABEL 标签 ...

  4. Mysql简要概述

    Mysql学习笔记 Mysql简介: ​ Mysql是一个轻量级关系型数据库管理系统,由瑞典Mysql AB公司开发,目前属于Oracle公司.目前Mysql被广泛地应用在Internet上的中小型网 ...

  5. ElasticSearch7.2简单命令实操(postman版)

    使用postman访问操作ElasticSearch数据库,数据格式均为json 目录 使用postman访问操作ElasticSearch数据库,数据格式均为json 一.集群设置 1.查看集群设置 ...

  6. Python赋值、浅复制和深复制

    Python赋值.浅复制和深复制 ​ 首先我们需要知道赋值和浅复制的区别: 赋值和浅复制的区别 赋值,当一个对象赋值给另一个新的变量时,赋的其实是该对象在栈中的地址,该地址指向堆中的数据.即赋值后,两 ...

  7. MDX学习笔记(整理) MDX语法

    1.1.members和Children的用法. select [Measures].[Internet Sales Count] on columns, [客户].[全名] on rows from ...

  8. LOJ10138

    ZJOI 2008 树上的统计 一树上有 n 个节点,编号分别为 1 到 n,每个节点都有一个权值 w.我们将以下面的形式来要求你对这棵树完成一些操作: CHANGE u t :把节点 u 权值改为t ...

  9. IO多路复用与epoll机制浅析

    epoll是Linux中用于IO多路复用的机制,在nginx和redis等软件中都有应用,redis的性能好的原因之一也就是使用了epoll进行IO多路复用,同时epoll也是各大公司面试的热点问题. ...

  10. HTTP1.0/1.1/2.0

    https://www.cnblogs.com/heluan/p/8620312.html http缓存策略 https://www.cnblogs.com/Iwillknow/archive/201 ...