vue实现两个组件之间数据共享和修改操作


Posted in Javascript onNovember 12, 2020

我们在使用vue开发过程中会遇到这样的情况,在父组件中引入了子组件,需要将父组件的值传到子组件中显示,同时子组件还可以更改父组件的值。

以我目前的一个项目的开发为例,如下图页面:

vue实现两个组件之间数据共享和修改操作

在父组件中,我引入了两个子组件,一个是左边的导航栏,还有中间的一个富文本编译器组件,当我点击左边导航栏时,中间的页面会切换,也就是改变引入的子组件。

怎么实现呢,首先,设置在该页面index.vue中设置一个变量index,左边导航栏每一项也对应一个index值,导航菜单绑定select函数,@select="handleSelect",@是v-on的简写。

handleSelect函数接收到参数,然后发射出去,再由父组件接收就可以了。

handleSelect(key, keyPath) {
  console.log(key, keyPath);
  this.changeIndex(keyPath[1])
  },
  changeIndex:function(key) {
  this.$emit("IndexChanged",key)
  }

this.$emit("IndexChanged",key)就是将key的值传到一个叫IndexChanged函数中,

在index.vue绑定IndexChanged接收值,<Aside v-on:IndexChanged="change($event)"> </Aside>然后调用change函数,注意$event是固定写法,接收的就是子页面传过来的key。然后就可以通过这个key改变index用来切换页面了。

下面通过一个更加简单直观的例子讲解一下,新建一个Test.vue:

<template>
 <div id="app">
 
 </div>
</template>
<script>
 export default{
 name:'Test',
 mounted() {

 },
 }
</script>

<style>
</style>

再建一个Test2.vue:

<template>

</template>

<script>
 export default {
 name: "Test2"
 }
</script>

<style scoped>
</style>

Test.vue是父组件,Test2.vue是子组件,下面先给Test配置路由,以便在浏览器上可以访问,为Test2定义模板,可以在Test中使用。

在router/index.js中添加下面代码

import Test from "../components/Test";
Vue.use(Router)

export default new Router({
 mode: 'history',
 routes: [
{
 path: '/t',
 name: 'Test',
 component: Test
 }
 ]
})

在main.js中,添加下面代码:

import Test2 from "./components/Test2";

Vue.use(Test2)
new Vue({
 el: '#app',
 router,
 components: {
 App,
 
 "Test2":Test2

 },

 template: '<App/>'
})

现在在test2页面写上这样一句,

<template>
<div>
 {{text2}}
</div>
</template>

<script>
 export default {
 name: "Test2",
 data(){
  return{
  text2:"这是Test2页面"
  }
 }

 }
</script>
<style scoped>

</style>

在test中引入test2,同时也定义一个变量text,然后显示在页面上,代码如下:

<template>
 <div id="app">
 {{text1}}
 <Test2></Test2>

 </div>
</template>
<script>

 import Test2 from "./Test2";
 export default{
 name:'Test',
 components: {Test2},
 data(){
  return{
  text1:"这是Test1页面"
  }
 },
 mounted() {
 },
 }
</script>

<style>
</style>

浏览器访问http://localhost:8080/t,页面如下:

vue实现两个组件之间数据共享和修改操作

现在要实现Test2接收Test1的值并显示:

绑定数据用v-bind

<Test2 v-bind:text1="text1"></Test2>

传的数据是Test页面的text1,命名也是text1,可以不同,但接收时的名字和第一个要相同。

Test2页面要接收数据啊,通过props接收:

props: ['text1'],

接收之后可以把它传给text2,也可以直接在页面显示:

<template>
<div>
 {{text2}}
 {{text1}}
</div>
</template>

<script>
 export default {
 name: "Test2",
 props: ['text1'],
 data(){
  return{
  text2:"这是Test2页面"
  }
 }

 }
</script>

<style scoped>
</style>

vue实现两个组件之间数据共享和修改操作

接收到text1值了,怎么同步更改呢,需要再绑定一个函数,如下:

<Test2 v-bind:text1="text1" v-on:textChanged="change($event)"></Test2>
....
methods: {
  change(msg){
  this.text1 = msg;
  }

 },

在test2中,将值发射到textChanged就可以了

mounted() {
  this.$emit("textChanged","我改了text1的值")
 }

vue实现两个组件之间数据共享和修改操作

补充知识:在vue中使用vuex,修改state的值

1、 安装 vuex

npm install vuex -S

2、在目录下创建store文件

vue实现两个组件之间数据共享和修改操作

3、 在store.js编辑一个修改state的方法

vue实现两个组件之间数据共享和修改操作

然后在mian.js中全局引入

vue实现两个组件之间数据共享和修改操作

最后在组件中使用

vue实现两个组件之间数据共享和修改操作

这个的功能是运用mutations 修改state中的值

以上这篇vue实现两个组件之间数据共享和修改操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 Javascript
JavaScript实现的简单烟花特效代码
Oct 20 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
Mar 29 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
vue组件间通信解析
Mar 01 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
JS实现快递单打印功能【推荐】
Jun 21 Javascript
详解JavaScript自定义函数
Jul 29 Javascript
JavaScript实现图片放大预览效果
Nov 02 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
Nov 12 #Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 #Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 #Javascript
在vue中使用image-webpack-loader实例
Nov 12 #Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 #Javascript
JavaScript ES 模块的使用
Nov 12 #Javascript
在vue中给后台接口传的值为数组的格式代码
Nov 12 #Javascript
You might like
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
javascript 函数式编程
2007/08/16 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
python使用scrapy解析js示例
2014/01/23 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Python中常见的异常总结
2018/02/20 Python
python中cPickle类使用方法详解
2018/08/27 Python
Python中logging实例讲解
2019/01/17 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
现场施工员岗位职责
2014/03/10 职场文书
保险公司年会主持词
2014/03/22 职场文书
效能监察建议书
2014/05/19 职场文书
电子商务专业自荐信
2014/06/02 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL