美文网首页
vue组件基础

vue组件基础

作者: 熬得萨菲 | 来源:发表于2020-02-06 19:53 被阅读0次

单项数据流:

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

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

数组的深度克隆: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组件基础

      本文链接:https://www.haomeiwen.com/subject/biguxhtx.html