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 相关文章推荐
JavaScript中使用正则匹配多条,且获取每条中的分组数据
Nov 30 Javascript
JQuery插件Style定制化方法的分析与比较
May 03 Javascript
jquery实现控制表格行高亮实例
Jun 05 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
DWR中各种java方法的调用
May 04 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 Javascript
基于jquery实现二级联动效果
Mar 30 jQuery
Angular中的$watch、$watchGroup、$watchCollection
Jun 25 Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
搭建vscode+vue环境的详细教程
Aug 31 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
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
python3 简单实现组合设计模式
2020/07/02 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
料理师求职信
2014/01/30 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
浅析JavaScript中的变量提升
2022/06/01 Javascript
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技