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. Electron实用技巧-开机启动时隐藏主窗口,只显示系统托盘

    # 1 在桌面软件中,开机自启动是很常见的功能,在electron中也提供了很好的支持,以下是主要代码: //应用是否打包if (app.isPackaged) {  //设置开机启动  app.se ...

  2. 通过logmnr找到被修改前的存储过程

    1.找到存储过程被修改时的归档日志 SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME BETWEEN TO_DATE('20191118080000', ...

  3. vue-cli3x4x修改本地端口port

    一.推荐方法 "scripts": { "serve": "vue-cli-service serve --port 3000", &quo ...

  4. 安装git-macOS系统

    通过homebrew安装Git 1.安装homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H ...

  5. odoo之技巧合集一

    罗列一些odoo开发中的简单但有效的方法: 1.重写odoo登录代码 参考链接:odoo10-重写登录方法 from odoo import models, fields, api, SUPERUSE ...

  6. Angular入门到精通系列教程(13)- 路由守卫(Route Guards)

    1. 摘要 2. 路由守卫(Route Guards) 2.1. 创建路由守卫 2.2. 控制路由是否可以激活 2.3. 控制路由是否退出(离开) 3. 总结 环境: Angular CLI: 11. ...

  7. ftp上传文件出现553 Could not creat files 严重文件传输错误

    之前上传文件到云服务器上一直出错,发现可以下载但是不能上传和编辑,后来终于找到原因了,是因为上传文件所在文件夹默认只有root用户才有写权限,所以我们还要将写权限赋予给其他用户.可以用Xshell 5 ...

  8. uni-app请求uni.request封装使用

    对uni.request的一些共同参数进行简单的封装,减少重复性数据请求代码.方便全局调用. 先在目录下创建 utils 和 common 这2个文件夹 utils 是存放工具类的,common 用来 ...

  9. Update Node Using a Package Manager nodesource

    How to Update Node.js to Latest Version (Linux, Ubuntu, OSX, Others) - HostingAdvice.com https://www ...

  10. status http status code 状态码

    RFC 6585 - Additional HTTP Status Codes https://tools.ietf.org/html/rfc6585 https://developer.mozill ...