10.14 结束Vue.js

prop单项数据流

重写v-model实现  1 绑定值 2 绑定事件 

<div id="app">
        {{msg}}
        <component1 :msg="msg"  @inputfn = "inputFn"></component1>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component("component1",{
            props:['msg'],
            template:` <input type="text" :value="msg" @change='$emit("inputfn",$event)'>
            `
        })
        var vm = new Vue({
            el:"#app",
            data:{
                msg:"120"
            },
            methods:{
                inputFn(e){
                    this.msg = e.target.value;
                }
            }
       
        })
    </script>

插槽 具名插槽 插槽作用域

 <div id="app">
        <component1>  
            <template v-slot:one>one 替换</template>
            <template v-slot:two>two 替换 </template>



        </component1>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component("component1",{
            template:`<div> 
                    <slot>插槽内容默认</slot>
                    <slot name='one'>插槽内容1</slot>
                    <slot name='two'>插槽内容2</slot>
            </div>`
        })
        var vm = new Vue({
            el:"#app",
            
        })

缓存

动画过渡  

进来和出去的是一样的状态  v-enter和 v-leave-to 

过渡:v-enter-active 是指 从v-enter到v-leave-to           v-leave-active 是指v-leave到v-leave-to

transition里加mode属性  如 mode="out-in" 出去的先做动画,离开然后新元素做动画进 来

 in-out就相反

 混入  Vue

 <script>
            var mixins={
                data:{
                    a:1,

                }
            };
            var vm =new Vue({
                mixins:[mixins],
                el:"#app",
                data:{ 
                },
                created(){
                    console.log(this.a)
                },
            })
        </script>

mixins   然后根实例里面的data如果需要  会覆盖前面的同样的data    然后方法或者周期函数不会覆盖 而是合并

 

vue 自定义指令

   Vue.directive("myhtml",{
                inserted(dom,options){
                    dom.innerHTML = options.value;
                   console.log(arguments);
                },
                update(dom,options){
                   dom.innerHTML = options.value;
                }
            })
            var vm =new Vue({
                // mixins:[mixins],
                el:"#app",
                data:{
                    msg:'hello',
                }
                
            })

主要是inserted update那两个函数传的参数打印出来 发现第一个是div (带有指令的dom) 第二个是很多 其中他的Value是根实例的数据  所以就写俩形参

函数渲染和jsx

版本  如果是完整的Vue.js (包含编译版和运行版) 可以在根实例添加template  也可以render(createElement)

   如果是只在运行时版本  Vue.runtime.js  只能用render(createElement) 

 var vm =new Vue({
                el:"#app",
                render(createElement){
                    console.log(arguments);
                   return createElement('h1','你好,吗')

                }
               
                
            })

createElement返回的是一个虚拟的节点   通过一定的手段(ast 抽象语法树手段)将虚拟节点转换为dom元素

 

过滤器 filter  只能用在胡子插值格式和V-bind里

Vue.filter('fliterNumber',function(){
                console.log(arguments)
            })

上面是全局的过滤器   定义局部的

var vm =new Vue({
                el:"#app",
                data:{
                    list:[1,2,3,4],
                    num:2,
                },
                fliters:{
                    fliterNumber(){

                    }

                }
               
            })

还有 过滤器串联和定义多个过滤器等

todolist   感觉写的有bug的     然后通过hash来实现的没看    是todolist下篇 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .active{
            background: red;
        }
    </style>
</head>
<body>
    <div id="app">
        <input type="text" v-model="val">
        <button @click="add">添加</button>
        <ul>
            <li v-for="(item,index) in newList">
                <span :class="{active:!item.isChecked}"  @click="choose(index)"> {{item.title}}</span>
                <button @click="del(index)">删除</button>
            </li>
        </ul>
        <button @click="show(0)">显示全部</button>
        <button @click="show(1)">显示有效的</button>
        <button @click="show(2)">显示无效的</button>
        <button @click="delAll">删除有效的</button>
    </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var vm =new Vue({
                el:"#app",
                mounted(){
                    this.newList=this.list;
                },
                data:{
                    list:[],
                    newList:[],
                    val:''
                },
                methods:{
                    add(){
                        this.list.push({
                            title:this.val,
                            isChecked:true
                            });
                        this.val='';
                    },
                    del(myIndex)
                    {
                        this.list = this.list.filter((item,index)=>{
                           return  myIndex !=index
                            
                        })
                    },
                    choose(myIndex){
                        // console.log(myItem)
                     this.list.map((item,index)=>{
                            // console.log(item);
                            if(index == myIndex)
                            {
                                item.isChecked=item.isChecked?false:true;
                            } 
                            // return item;
                        });                       
                    },
                    show(index)
                    {
                        switch(index){
                            case 0: this.newList = this.list;break;
                            case 1: this.newList=this.list.filter(item=>item.isChecked==true);break;
                            case 2: this.newList=this.list.filter(item=>item.isChecked==false);break;
                            default:break;
                        }
                    },
                    delAll(){
                        this.list=this.list.filter(item=>item.isChecked==false)
                    }
                    
                }
               
                
            })
        </script>
</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值