美文网首页
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