JavaScript

超轻量级php框架startmvc

vuejs2.0子组件改变父组件的数据实例

更新时间:2020-05-11 07:24:01 作者:startmvc
在vue2.0之后的版本中,不允许子组件直接改变父组件的数据,在1.0的版本中可以这样操作的

在vue2.0之后的版本中,不允许子组件直接改变父组件的数据,在1.0的版本中可以这样操作的,但是往往项目需求需要改变父组件的数据,2.0也是可一个,区别是,当我们把父元素的数据给子组件时,需要传一个对象,子组件通过访问对象中的属性操作数据,下面是演示


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script type="text/javascript" src="vue.js"></script> 
 <script type="text/javascript">
 window.onload = function(){
 var app = new Vue({
 el:'#box',
 data:{
 myData:{
 info:'父组件信息'
 }
 },
 components:{
 'v-com':{
 props:['data'],
 template:'#tpl',
 methods:{
 change(){
 this.data.info = 'change info'
 }
 }
 }
 }
 })
 }
 </script>
</head>
<body>
 <!-- 子组件改变父组件的数据 -->
 <div id="box">
 <div>
 <p>{{myData.info}}</p>
 <v-com :data ="myData"></v-com>
 </div>
 </div>

 <!-- 模板 -->
 <template id="tpl">
 <div>
 <button @click="change">change</button>
 <p>{{data.info}}</p>
 </div>
 </template>

</body>
</html>

这种是同步改变数据,就是说子组件的数据改变,父组件数据也跟着改变,下面展示非同步的情况


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script type="text/javascript" src="vue.js"></script> 
 <script type="text/javascript">
 window.onload = function(){
 var app = new Vue({
 el:'#box',
 data:{
 myData:'父组件信息'
 },
 components:{
 'v-com':{
 data() {
 return {
 childData:''
 }
 },
 props:['data'],
 // dom渲染完毕
 mounted(){
 this.childData = this.data
 },
 template:'#tpl',
 methods:{
 change(){
 this.childData = 'change info'
 }
 }
 }
 }
 })
 }
 </script>
</head>
<body>
 <!-- 子组件改变父组件的数据,不同步 -->
 <div id="box">
 <div>
 <p>{{myData}}</p>
 <v-com :data ="myData"></v-com>
 </div>
 </div>

 <!-- 模板 -->
 <template id="tpl">
 <div>
 <button @click="change">change</button>
 <p>{{childData}}</p>
 </div>
 </template>

</body>
</html>

这里巧妙的通过mounted这个方法进行了中转,实现了想要的效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

vue 改变组件数据 vue 改变父组件的值 vue子组件改变父组件