vue组件基础

单项数据流:

一.
父组件可以通过属性的方式传输一些数据,子组件接收到处理数据

注意点:处理数据的时候,必须先把数据克隆一份,不然的话修改数据,父组件里面的数据也会被修改;

数组的深度克隆:arr.concat( [] );

二.
要想拿到子组件里面的数组,必须从里面使用this.$emit("数据名test",要传的数据this.data)注册事件抛出去,然后将这个数据名用:绑定在组件行间样式上

 子组件:
 const component1 = {
    methods:{
        //为什么要返回一个对象?因为组件很多,如果别的组件直接操作这个数据的话会被改变,必须用函数包裹起来,每次实例化都返回一个唯一的数据
        data () {
            return {
                data:"xxx",
            }
        },
        //点击事件的时候将它抛出去
        push () {
            //list就是注册的事件
            this.$emit("list",this.data);
        }
    }
    
 }
    //父组件通过子组件绑定的事件函数拿到数据
     <cur-list :list="getdata"></cur-list>;
     
 父组件:
    methods:{
        getdata (data) {
            console.log(data);
        }
    }

三 在已经使用的子组件上面,父组件在这注册事件,不能触发,必须要在子组件里面注册这个事件;

    .native :父组件的事件和子组件关联

    //这样注册的函数事件父组件不能触发
    <cur-list :list="getdata" @click="show"></cur-list>; 
    //必须给事件添加修饰符  :  .native
     <cur-list :list="getdata" @click.native="show"></cur-list>; 

四 保留输入框之前状态: keep-alive ,将子组件放在这个标签下面,相当于缓存状态,切换的话还能记住上一次的数据

    <keep-alive>
    切换:保存上次的内容,可以和组件配合使用,当你想保存上一次的状态的时候
        输入框1
        输入框2
    </keep-alive>
    
    
    切换组件的时候的方式还有 `is` 
    <component is="type"><component>
    可以绑定,然后父组件定义规则
    <component :is="type"><component>

五 插槽:slot

    组件:
    const test = {
        template: "<div> <slot name="wow"><slot> </div>"
    }
    
    使用:
    <div id="app">
        <test>
            //这就是插槽预留的位置
            <span></span>
        <test>
    </div>

六. 作用域插槽 slot-scope:

    子组件:
     const inp2 = {
            props:['list'],
            template:`<div>
                     组件2: <input type="text">
                     <ul>
                          <slot v-for="(item,index) in list"
                          :key="item"
                          :index = "index"
                          :item = "item"
                         >
                          </slot>
                    </ul>
                   </div>`
        };

    使用:
     <div id="app">
            //父组件里面的data
            <inp2 :list="data">
                //拿到的是每个插槽
                <template slot-scope="zidingyi">
                    <li> {{zidingyi.item}} - {{zidingyi.index}} </li>
                </template>
            </inp2>
        </div>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Vue组件概念 组件是可复用的 Vue 实例,且带有一个名字,例如: 在这个例子中,组件的名字是:input-...
    橙赎阅读 178评论 0 2
  • 组件是可复用的Vue实例,且带有一个名字。我们可以在一个通过new Vue创建的Vue根实例中,把这个组件作为自定...
    oWSQo阅读 333评论 0 0
  • 祭出demo 基础示例 组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、...
    rainbowboy阅读 865评论 0 50
  • 定义Vue组件 什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功...
    誩先生阅读 172评论 0 0
  • 本章内容:表单 与 v-model、组件、自定义指令 六、表单 与 v-model 6.1、基本用法 Vue.js...
    了凡和纤风阅读 947评论 1 2