当前位置: 首页 > news >正文

vue组件之间的传值方式

一.父组件向子组件传值方式

1.1父组件向子组件传数据方式

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="vue.js"></script>
 9 </head>
10 <body>
11     <div id="app">
12         <com1></com1>
13     </div>
14     <script>
15 
16         var vm=new  Vue({
17             el:'#app',
18             data:{
19                 msg:'123==啊父组件中的数据'
20             },
21             methods: {
22                 
23             },
24             // 定义一个私有子的组件
25             components: {
26                 // 来看下子组件能拿到vm父组件中的data里面的msg数据吗
27                 // 结论:经过演示,发现,子组件中,默认无法访问到父组件的data上的数据和methods中的方法
28                 // 那么子组件怎么获取到父组件的数据
29                 com1:{
              //这里会报错:子组件直接引用父组件的msg数据
30 template:'<h1>这是子组件--{{msg}}</h1>' 31 } 32 } 33 }) 34 </script> 35 </body> 36 </html>
  // 那么子组件怎么获取到父组件的数据: 父组件,可以在引用子组件的时候,通过熟悉绑定(v-bind)的形式,把需要传递给子组件的数据,以属性绑定的形式,子组件通过props定义父组件传过来的数据才能使用
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="vue.js"></script>
 9 </head>
10 <body>
11     <div id="app">
12         <!-- 父组件,可以在引用子组件的时候,通过熟悉绑定(v-bind)的形式,把需要传递给子组件的数据,以属性绑定的形式, -->
13         <!-- 传递到子组件内部,供子组件使用 -->
14         <com1 v-bind:parentmsg="msg"></com1>
15     </div>
16     <script>
17 
18         var vm=new  Vue({
19             el:'#app',
20             data:{
21                 msg:'123==啊父组件中的数据'
22             },
23             methods: {
24                 
25             },
26             // 定义一个私有子的组件
27             components: {
28                 // 来看下子组件能拿到vm父组件中的data里面的msg数据吗
29                 // 结论:经过演示,发现,子组件中,默认无法访问到父组件的data上的数据和methods中的方法
30                 // 那么子组件怎么获取到父组件的数据
31                 com1:{
32                     data(){
33                         // 注意:子组件中的data数据,并不是父组件传递过来的,而是子组件自身私有的,比如:子组件子组件通过ajax,
34                         // 请求回来的数据,都可以放在data身上
35                         return{
36                             title:'123',
37                             content:'qqq'
38                         }
39                     },
40                     template:'<h1>这是子组件--{{parentmsg}}</h1>',
41                     // 注意:组件中的所有props中的数据,都是通过父组件传递给子组件的
42                      // 注意子组件中的data和props数据的区别:props只读,无法重新赋值,data数据都是可读可写
43                     // props是一个数组,把父组件传递过来的parentmsg属性,先在props数组中定义一下,这样才能使用这个数据
44                     props: ['parentmsg']
45                    
46                 }
47             }
48         })
49     </script>
50 </body>
51 </html>
1.2父组件向子组件传递方法,使用的是事件绑定机制,子组件通过$emit()方法拿到父组件传过来的数据
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="vue.js"></script>
 9 </head>
10 <body>
11     <div id="app">
12         <!-- 如果是事件的话就用事件绑定机制 -->
13         <!-- 父组件向子组件传递方法,使用的是事件绑定机制 v-on,当我们自定义一个事件属性之后, -->
14         <!-- 那么子组件就能够,通过某些方式,来调用传递这个方法了 -->
15         <com2 v-on:func="show"></com2>
16     </div>
17     <template id="tmp1">
18         <div>
19             <h1>这是子组件</h1>
20             <input type="button" value="这是子组件中的按钮,-点击它,触发父组件传递过来的func方法" @click="myclick">
21         </div>
22     </template>
23     <script>
24         // 定义一个字面量类型的组件模板对象
25         var com2={
26             // 通过指定一个ID,表示说,要去加载这个指定ID的template元素中的内容,当作组件的HTML结构
27             template:'#tmp1',
28             methods:{
29                 myclick(){
30                     // 当点击子组件按钮的时候,如何拿到父组件传递过来的func方法,并调用这个方法
31                     // emit触发
32                     this.$emit('funcs')
33                 }
34             }
35         }
36         var vm=new  Vue({
37             el:'#app',
38             data:{
39                show(){
40                    console.log('调用了父组件上的show方法')
41                }
42             },
43             methods: {
44                
45             },
46             components: {
47                 com2
48                 // 类似于 com2:com2
49 
50             }
51         })
52     </script>
53 </body>
54 </html>
 
 

二.子组件向父组件传值

子组件向父组件传值成功
总结一下:

  • 子组件中需要以某种方式例如点击事件的方法来触发一个自定义事件
  • 将需要传的值作为$emit的第二个参数,该值将作为实参传给响应自定义事件的方法
  • 在父组件中注册子组件并在子组件标签上绑定对自定义事件的监听

调用父组件的方法,并向父组件传参数

 
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="vue.js"></script>
 9 </head>
10 <body>
11     <div id="app">
12         <!-- 如果是事件的话就用事件绑定机制 -->
13         <!-- 父组件向子组件传递方法,使用的是事件绑定机制 v-on,当我们自定义一个事件属性之后, -->
14         <!-- 那么子组件就能够,通过某些方式,来调用传递这个方法了 -->
15         <com2 v-on:func="show"></com2>
16     </div>
17     <template id="tmp1">
18         <div>
19             <h1>这是子组件</h1>
20             <input type="button" value="这是子组件中的按钮,-点击它,触发父组件传递过来的func方法" @click="myclick">
21         </div>
22     </template>
23     <script>
24         // 定义一个字面量类型的组件模板对象
25         var com2={
26             // 通过指定一个ID,表示说,要去加载这个指定ID的template元素中的内容,当作组件的HTML结构
27             template:'#tmp1',
28             methods:{
29                 myclick(){
30                     // 当点击子组件按钮的时候,如何拿到父组件传递过来的func方法,并调用这个方法
31                     // 从第二个参数开始进行传参数
32                     this.$emit('func',123)
33                 }
34             }
35         }
36         var vm=new  Vue({
37             el:'#app',
38             data:{
39                show(data){
40                    console.log('调用了父组件上的show方法------'+data)
41                }
42             },
43             methods: {
44                
45             },
46             components: {
47                 com2
48                 // 类似于 com2:com2
49 
50             }
51         })
52     </script>
53 </body>
54 </html>
 
 

 子组件向父组件传值的方式

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="vue.js"></script>
 9 </head>
10 <body>
11     <div id="app">
12         <!-- 如果是事件的话就用事件绑定机制 -->
13         <!-- 父组件向子组件传递方法,使用的是事件绑定机制 v-on,当我们自定义一个事件属性之后, -->
14         <!-- 那么子组件就能够,通过某些方式,来调用传递这个方法了 -->
15         <com2 v-on:func="show"></com2>
16     </div>
17     <template id="tmp1">
18         <div>
19             <h1>这是子组件</h1>
20             <input type="button" value="这是子组件中的按钮,-点击它,触发父组件传递过来的func方法" @click="myclick">
21         </div>
22     </template>
23     <script>
24         // 定义一个字面量类型的组件模板对象
25         var com2={
26             // 通过指定一个ID,表示说,要去加载这个指定ID的template元素中的内容,当作组件的HTML结构
27             template:'#tmp1',
28             data(){
29                 return{
30                     sonmsg:{
31                         name:'小头儿子',
32                         age:6
33                     }
34                 }
35             },
36             methods:{
37                 myclick(){
38                     // 当点击子组件按钮的时候,如何拿到父组件传递过来的func方法,并调用这个方法
39                     // 从第二个参数开始进行传参数
40                     // this.$emit('func',123)
41                     this.$emit('func',this.sonmsg)
42                 }
43             }
44         }
45         var vm=new  Vue({
46             el:'#app',
47             data:{
48                 // 定义一个从儿子那里拿过来的数据
49                datamsgFromSon:null
50             },
51             methods: {
52                 show(data){
53                 //    console.log('调用了父组件上的show方法------'+data)
54                 console.log(data)
55                     this.datamsgFromSon=data;
56                     console.log(this.datamsgFromSon)
57                }
58             },
59             components: {
60                 com2
61                 // 类似于 com2:com2
62 
63             }
64         })
65     </script>
66 </body>
67 </html>

 

发现一个可以查看的文章
https://www.cnblogs.com/daiwenru/p/6694530.html

 

 
 
 

 

 

转载于:https://www.cnblogs.com/wanqingcui/p/10757344.html

相关文章:

  • C# Attribute
  • linux 网络虚拟化: network namespace 简介
  • TBDR
  • CBFR和CBDR
  • Ajax 的学习
  • Unity2019使用Gradle打包Apk的问题
  • 有符号距离场(Signed Distance Field,SDF)
  • 面向对象串讲
  • C#结构体里面包含类
  • SpringBoot的自动配置原理
  • postman通过引入外部文件实现参数化
  • unity中画摄像机的视锥体和判断一个点是否在视锥体内
  • 82. 删除排序链表中的重复元素 II
  • unity Graphics.DrawMesh的绘制顺序测试
  • 树莓派Ubuntu Mate 16.04 修改为国内更新源
  • IDEA 插件开发入门教程
  • iOS编译提示和导航提示
  • Java多态
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 翻译--Thinking in React
  • 分享一份非常强势的Android面试题
  • 如何解决微信端直接跳WAP端
  • 树莓派 - 使用须知
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 微信开放平台全网发布【失败】的几点排查方法
  • (1)(1.11) SiK Radio v2(一)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C++)八皇后问题
  • (c语言)strcpy函数用法
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (篇九)MySQL常用内置函数
  • (已解决)什么是vue导航守卫
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • **PHP分步表单提交思路(分页表单提交)
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bashrc在哪里,alias妙用
  • .net core控制台应用程序初识
  • .NET 表达式计算:Expression Evaluator
  • .NET开发人员必知的八个网站
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET中的Exception处理(C#)
  • .stream().map与.stream().flatMap的使用
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @Conditional注解详解
  • [20171106]配置客户端连接注意.txt
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [DL]深度学习_Feature Pyramid Network
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘
  • [IMX6DL] CPU频率调节模式以及降频方法
  • [IOI2018] werewolf 狼人
  • [JMS 3] ActiveMQ实现简单的helloworld