zoukankan      html  css  js  c++  java
  • web前端 -- vue --vue 组件通信(1)

    根据千峰教育学习视频所练习的笔记 | 学习一段时间,我也有写一点东西的必要了···

    1. 父组件向子组件通信

    1.1. 我们还是引用vue先前的代码:如下

    <head>
        ······
        <script src="../vue.js"></script>
    </head>
    <body>
    <div id="app">
        <my-header></my-header>
    </div>
    <script>
        var vm = new Vue({
           el:'#app',
           components:{
               'my-header':{
                   template:`<div>
                                <h2>{{message}}</h2>
                                <ul>
                                    <li >张一山</li>
                                </ul>
                             </div>`,
                   data:function () {
                       return{
                           message:'hello my idol',
                       };
                   }
               }
           }
        });
    </script>
    </body>
    
    • 就是长这个样子:
    ![](https://img2018.cnblogs.com/blog/1817586/201910/1817586-20191024162510035-85654409.png)

    1.2. 那我们来看看怎么在父子组件中进行通信:

    • 首先在<ul>里写一个list数据,写好之后对<li>进行遍历操作
    components:{
        'my-header':{
            template:`<div>
                        <h2>{{message}}</h2>
                        <ul>
                            <li v-for="item in list">{{item}}</li>
                        </ul>
                      </div>`,
      <!-- v-for 遍历      -->
            data:function () {
                return{
                    message:'hello my idol',
                    list:['张一山','吴京','李现','肖战']
                };
            }
        }
    }
    
    • 可以看到,数据被遍历到页面当中了
    ![](https://img2018.cnblogs.com/blog/1817586/201910/1817586-20191024162520894-1752679776.png)

    1.3. 若数据不在当前组件,而是在它的父组件当中,现在把它传递过来怎么做呢

    • 首先要了解一下,当前组件是<my-header>,它的父组件可以看作是app。因为前面讲过,new 一个实例也是创建组件的方式,但是真实的组件是扩展了实例的方式,实例也是可以看作组件的。
    <div id="app">
        <my-header></my-header>
    </div>
    
    • 现在 app 充当父组件,我们就可以在里面写 data配置
    <script>
        var vm = new Vue({
           el:'#app',
           data:{
                list:['张一山','吴京','李现','肖战'],
                //光写这里不会有作用,还需继续写props
            },
           components:{
               'my-header':{
                   ······
                       return{
                           message:'hello my idol',
                       };
                   }
               }
           }
        });
    </script>
    
    • 但是现在list是没有被渲染出来:
    ![](https://img2018.cnblogs.com/blog/1817586/201910/1817586-20191024162533777-279179463.png)

    1.4. 为了防止冲突与解耦性,当前的数据只能操作于当前组件。那有的时候我们需要父组件传递数据,可以通过固定的写法来完成。

    • 在子组件中引入 list 数据并设置key值,然后在 props 中引用相应key值
    <div id="app">
        <my-header :list="list"></my-header>
    <!--    等号左边是key值,右边是数据-->
    </div>
    <script>
        var vm = new Vue({
           el:'#app',
           data:{
                list:['张一山','吴京','李现','肖战'],
                //光写这里不会有作用,还需继续写props
            },
           components:{
               'my-header':{
                   ······
                       return{
                           message:'hello my idol',
                       };
                   },
                   props:['list'],
                   //引入key值
               }
           }
        });
    </script>
    

    现在就可以渲染,能进行父子组件的通信了

    ![](https://img2018.cnblogs.com/blog/1817586/201910/1817586-20191024162615320-949443802.png)

    1.5. 我们现在来一个复杂的,父组件可以把数据传给子组件,子组件还可以传给自己的子组件

    • 定义一个子组件的子组件 <my-nav>,同样去设置components
     <script>
        var vm = new Vue({
            ······
            components:{
               'my-header':{
                   template:`<div>
                                ······
                                </ul>
                                <my-nav :list="list"></my-nav>
                             </div>`,
                   //v-for 遍历
                   ···   
                   props:['list'],
                   components: {
                       'my-nav':{
                           template: `<ul>
                                        <li v-for="item in list">{{item}}</li>
                                     </ul>`,
                           props:['list']
        //    数据一层一层地传递,不能越层,ma-nav也要进行挂载处理
                       }
                    }      
               }
           }
        });
    </script>
    

    这样就实现数据传递了:

    ![](https://img2018.cnblogs.com/blog/1817586/201910/1817586-20191024162626778-712281062.png)

    1.6. props 除了传递数据,还能做验证处理,这里就不展示了

  • 相关阅读:
    ubuntu12.04 LTS 安装vmware 错误解决方法
    Linux 下的Bluetooth 架构 分类: Android驱动 20120316 11:07 492人阅读 评论(0) 收藏 举报 实战Linux Bluetooth编程(一) 协议栈概述
    通过DEFINE 生存config.h 配置
    Git的初次使用 ; Git常用命令查询 ; Git push ; Git pull 20111216 17:32 在介绍安装和简单使用前,先看一下百度百科中的简介吧: ———————————
    Android BCM4330 蓝牙BT驱动调试记录
    Linux的cpufreq(动态变频)技术
    高通平台android开发总结
    ssh 客户端配置文件
    Jprofile使用随笔_1_安装与监控linux
    服务器cpu占用100%,如何排查(java进程&sql)
  • 原文地址:https://www.cnblogs.com/hefeifei/p/11732969.html
Copyright © 2011-2022 走看看