时间:2021-05-26
1、路由通信传值
路由通信是通过路由跳转用query把参数带过去,也是vue常用的通信手段。
例子:创建并在路由注册一个组件Head
<template> <div id="head"> <button @click="handleChange">clickMe</button> //给按钮绑定点击事件 </div> </template><script>export default { name: 'Head', data () { return { } }, mounted(){ }, updated(){ }, methods:{ handleChange(){ this.$router.push({ path:"/about" , query:{ text:"我是阿格斯之盾" } }) //路由跳转,并用query带过去参数 } }}</script><style scoped></style>创建另一个组件About并在路由注册
<template> <div id="about"> <p>我是关于页:{{ message }}</p><button type="button" @click="handleChange">回到首页</button> //显示接收过来的数据 </div> </template><script>export default { name: 'About', data () { return { message: "" } }, mounted(){ this.message = this.$route.query.text //在生命周期中接收传过来的数据 }, updated(){ }, methods:{ handleChange(){ this.$router.push({ path: "/" }) //点击返回首页 } }}</script><style scoped></style>路由注册的简单代码
import Vue from 'vue'import Router from 'vue-router'import Head from '@/components/Head'import About from '@/components/About'Vue.use(Router)export default new Router({ mode: "history", routes: [ { path: '/', name: 'Head', component: Head },{ path: '/about', name: 'About', component: About } ]})2、sessionStorage本地缓存通信
还是列举上面的例子,将它们稍微改一改就可以了,路由配置都一样的。sessionStorage的特点就是浏览器关掉缓存就会消失,这是它区别于localStorage的。
例子: Heade代码:
<template> <div id="head"> <button @click="handleChange">clickMe</button> </div> </template><script>export default { name: 'Head', data () { return { } }, updated(){ }, methods:{ handleChange(){ this.$router.push({ path:"/about"}) }, message(){ var message = "我是阿格斯之盾" sessionStorage.setItem('text', message) //创建缓存 } }, mounted(){ this.message(); }}</script><style scoped></style>About代码:
<template> <div id="about"> <p>我是关于页:{{ message }}</p><button type="button" @click="handleChange">回到首页</button> </div> </template><script>export default { name: 'About', data () { return { message: "" } }, mounted(){ this.message = sessionStorage.getItem("text") //读取缓存 }, updated(){ }, methods:{ handleChange(){ this.$router.push({ path: "/" }) } }}</script><style scoped></style>3、父组件向子组件通信
定义父组件Head,还是用上面的例子,父组件传递一句话给子组件,如果传递的参数很多,可使用json数组{}的形式。
例子: Head父组件代码
<template> <div id="head"> <About :text=message></About> //将message参数传给子组件 </div> </template><script> import About from '@/components/About.vue'export default { name: 'Head', components:{ About }, data () { return { message : "我是阿格斯之盾" } }, mounted(){ }, methods:{ }}</script><style scoped></style>About子组件代码
<template> <div id="about"> <p>我是关于页:{{ text }}</p> </div></template><script>export default { name: 'About', props:{ 'text':[] //子组件接受数据,[]里面可以写传入类型,如果不符合会报错 }, data () { return { message: "" } }, mounted(){ }, updated(){ }, methods:{ handleChange(){ } }}</script><style scoped></style>4、子组件向父组件通信 子组件向父组件通信是通过emit事件发送的,话不多说,直接上案例,还是利用上面的案例稍作修改 About子组件代码:
<template> <div id="about"> <button @click="handleChange">点击发送消息给父组件</button> </div></template><script>export default { name: 'About', props:{ 'text':[] }, data () { return { message: "" } }, mounted(){ }, updated(){ }, methods:{ handleChange(){ this.$emit( "child-message" , "我是阿格斯之盾" ) //提交信息 } }}</script><style scoped></style>Head父组件代码
<template> <div id="head"> <About @child-message = "handleText"></About> //这里传过来父组件需要用一个方法接住 <p>来自子组件的消息:{{message}}</p> </div> </template><script> import About from '@/components/About.vue'export default { name: 'Head', components:{ About }, data () { return { message : "" } }, mounted(){ }, methods:{ handleText(data){ //这里的data就是子组件传过来的内容 this.message = data } }}</script><style scoped></style>5、vuex状态管理
状态管理使用起来相对复杂,但是对于大型项目确实非常实用的。
(1)安装vuex,并建立仓库文件
npm install vuex -s安装过后在src文件中创建store文件夹,并建立index.js文件,index.js的代码如下:
import Vue from 'vue';import Vuex from 'vuex';Vue.use(Vuex);const store = new Vuex.Store({ state: { message: '我是阿格斯之盾' }, mutations: { MESSAGE_INFO (state,view) { state.message = view; } }})export default store(2)在min.js中注册store仓库 代码如下:
import Vue from 'vue'import App from './App'import router from './router'import store from './store'Vue.config.productionTip = falsenew Vue({ el: '#app', router, store, components: { App }, template: '<App/>'})(3)状态的读取和提交 还是使用上面的案例,我们以子组件About提交改变状态,父组件Head接受状态并显示出来下面是About组件提交状态
<template> <div id="about"> <button @click="handleChange">点击发送消息给父组件</button> </div></template><script>export default { name: 'About', props:{ 'text':[] }, data () { return { message: "" } }, mounted(){ }, updated(){ }, methods:{ handleChange(){ this.$store.commit("MESSAGE_INFO" , "我是火车王") //提交改变状态 } }}</script><style scoped></style>Head组件接受状态:
<template> <div id="head"> <About></About> <p>来自子组件的消息:{{this.$store.state.message}}</p> //直接使用this.$store.state.message接受数据显示 </div> </template><script> import About from '@/components/About.vue'export default { name: 'Head', components:{ About }, data () { return { message : "" } }, mounted(){ }, methods:{ }}</script><style scoped></style>总结:以上就是vue中的通信方式,当然还有一些,比如说eventBus什么的,适用于中小型项目,但是我用的比较少,一般上面的几种在开发中已经够用的,例子很简单,学习是永无止境的,具体更深的东西还得下功夫去研读官网或者其他资料,本文中有不对的地方或者疑惑的地方,还望大家多多指教!谢谢。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单。这次我们就来聊一聊vue2.0组件之间传值、通信的多种方式。
接着vue组件父与子通信详解继续学习。二、组件间通信(子组件传值给父组件)通过事件的方式来完成数据的传输。①在父组件中定义一个方法,用来接收子组件所通过事件传来
前端后端传值问题总结前端传给后端通过表单传值1、通过表单get请求传值在前端当通过get的方式传值时,表单中的标签的name值将会被当做action的地址的参数
稍微总结了一下Vue中父子间传值以及相互调方法的问题,非常基础、希望可以帮到你!先来个最常用的,直接上代码:1、父传值给子组件父组件:父组件importchil
使用vue也有很多年了,一直都没有整理一下相关知识,给大家总结下开发过程中所遇到的一些坑,主要给大家总结一下vue组件传值的几种常用方法:1、通过路由带参数传值