• vue学习笔记


    v-on:绑定事件(简写:也可将v-on:替换为@)

    v-for:循环(相当于js中的for in循环)

    v-if:判断(v-else-if,v-else)

    v-model:双向绑定数据,用于表单元素

    v-bind:主要用于属性绑定(简写:也可将v-bind:替换为:  如v-bind:href,简写为:href)

    v-once:只渲染元素或组件1次,后期数据改变时不重新渲染

    v-html:相当于html

    修饰符 (Modifiers) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()
    例:<form v-on:submit.prevent="onSubmit">...</form>
    注:当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。

    项目参考:https://segmentfault.com/p/1210000008583242/read?from=timeline#Demo%E7%A4%BA%E4%BE%8B

    <div class="c1">
        <p>
            {{counter}}
        </p>
        <button v-on:click="counter+=1">点击</button>
    </div>
    <script>

    var app=new Vue({
            el:".c1",
            data:{
                counter:1
            }
        });
    </script>
    <div class="c2"> <!--执行的时候,如需传入e,则用$event代替--> <button v-on:click="reserve('8888888888888888',$event)">diandian</button> </div> <script> var app2=new Vue({ el:".c2", data:{ name:"aaa" }, methods:{ reserve:function(para,e){ console.log(para); e.target.innerHTML=this.name;//如果想调用data中的值要通过this查找 不能通过data } } }) </script>
    <div class="app1">
        <p v-if="seen" v-bind:title="message">
            {{message}}
        </p>
    </div>
    <script>
        var app1=new Vue({
            el:'.app1',
            data:{
                seen:true,
                message:"66666666666666666666666666"
            }
        });
    </script>
    <div class="app2">
        <ul>
            <li v-for="item in items">
                {{item.text}}
            </li>
        </ul>
    </div>
    <script>
        var app2=new Vue({
            el:'.app2',
            data:{
                items:[
                    {'text':"11111"},
                    {'text':"222222"},
                    {'text':"333333"},
                    {'text':"444444"},
                    {'text':"555555"}]
            }
        });
    </script>
    <div class="app3">
        <p>
            {{message}}
        </p>
        <input type="text" v-model="message"/>
    </div>
    <script>
        var app3=new Vue({
            el:'.app3',
            data:{
                message:"12"
            }
        });
    </script>
    <div class="app4">
        <p>
            {{message}}
        </p>
    </div>
    <script> 
        var app4=new Vue({
            el:".app4",
            data:{
                message:"页面加在于"+new Date()
            }
        })
    </script>
    View Code

    列表渲染:

        <div class="app1">
            <p v-for="(value,key,index) in items">
                {{key}}:  {{value}}---{{index+2}}
            </p>
        </div>
        <script>
            var app1=new Vue({
                el:'.app1',
                data:{
                    items:
                        {
                            name:"zyl",
                            age:"18",
                            sex:'male'
                        }
                }
            })
        </script>
        <div class="app2">
            <p v-for="item in 10">
                {{item}}
            </p>
        </div>
        <script>
            var app2=new Vue({
                el:'.app2',
                data:{}
            })
        </script>
        <div class="app3">
            <p v-for='item in items'>
                {{item.name}}
            </p>
        </div>
        <script>
            var app3=new Vue({
                el:'.app3',
                data:{
                    items:[
                        {name:1},
                        {name:2},
                        {name:3}
                    ]
                }
            })
        </script>
    View Code

    实例:

    <script>
        var dd={
            a:123
        };
        var vm=new Vue({
            data:dd,
            created:function(){
                console.log(this.a);
            }
        });
        console.log(vm.a);
        vm.a=222;
        console.log(dd.a);
        console.log(vm.a);
        vm.a=111;
        console.log(dd.a);
        console.log(vm.$data == dd);
        console.log(vm.a==vm.$data.a);
        vm.$watch('a',function(newVal,oldVal){
            console.log(newVal,oldVal)
        })
    </script>
    View Code

    条件渲染:

    <div class="app1">
        <span v-if="aa">111</span>
        <span v-else>222</span>
    </div>
    <script>
        var app1=new Vue({
            el:".app1",
            data:{
                aa:true
            }
        })
    </script>
    <div class="app2">
        <span v-if="type == 0">111</span>
        <span v-else-if="type == 1">222</span>
        <span v-else-if="type == 2">000</span>
        <span v-else>aaa</span>
    </div>
    <script>
        var app2=new Vue({
            el:".app2",
            data:{
                type:0
            }
        })
    </script>
    <div class="app3">
        <span v-show="aa">12121212121212</span>
    </div>
    <script>
        var app3=new Vue({
            el:".app3",
            data:{
                aa:false
            }
        })
    </script>
    View Code

    模板语法(指令、插值、过滤器):

    <div class="app1">
        <a v-bind:name="aa" v-on:click="cc()" v-bind:title="bb" v-bind:href="url" id="item">多点点--{{ok? 12:21}}</a>
        <span>
            {{cc.split("").reverse().join("")}}
        </span>
        <span>
            <!--{{cc | capitalize}}-->
        </span>
    </div>
    <script>
        var app1=new Vue({
            el:".app1",
            data:{
                aa:"a123",
                bb:"nnnn",
                ok:true,
                cc:"abcdefh",
                url:"cnmstl.net"
            },
            methods:{
                cc:function(){
                    alert(1)
                }
            }
        })
    </script>
    <h6>插值</h6>
    <div class="app2">
        <span>{{message}}</span>
        <input type="text" v-model="message"/>
    </div>
    <script>
        var app2=new Vue({
            el:".app2",
            data:{
                message:123321
            }
        })
    </script>
    <div class="app3">
        <span v-once>{{message}}</span><!--v-once:只绑定一次值,当message值再发生变化时,span中的内容不跟随变化-->
        <input type="text" v-model="message"/>
    </div>
    <script>
        var app3=new Vue({
            el:".app3",
            data:{
                message:123
            }
        })
    </script>
    <div class="app4">
        <span v-html="message"></span><!--v-html表示插入html代码-->
    </div>
    <script>
        var app4=new Vue({
            el:'.app4',
            data:{
                message:"<em>111</em>"
            }
        })
    </script>
    <div class="app5">
        <p>{{number+1}}</p>
        <p>{{!number?'yes':'no'}}</p>
        <p>{{new Date()}}</p>
        <p>{{Math.random()}}</p>
        <p>{{str.split("").reverse().join("")}}</p>
        <p v-if="aa">显示内容</p>
        <button v-bind:disabled="bb">按钮</button>
    </div>
    <script>
        var app5=new Vue({
            el:".app5",
            data:{
                number:10,
                str:"abcdefgh",
                aa:true,
                bb:true
            }
        })
    </script>
    <h6>过滤器</h6>
    <div class="app6">
        <span :title="message">
            {{message|flag}}
        </span>
    </div>
    <script>
        var app6=new Vue({
            el:".app6",
            data:{
                message:"abc",
                title:"app-name"
            },
            filters:{
                flag:function(value){
                   if(!value){
                       return '';
                   }
                    return value.charAt(0).toUpperCase()+value.slice(1);
                }
            }
        })
    </script>
    View Code

    改变class和内联样式:

    <div class="app1">
        <span v-bind:class="{active:disActive}">111</span>
    </div>
    <script>
        var app1=new Vue({
            el:'.app1',
            data:{
                disActive:true
            }
        })
    </script>
    <div class="app2">
        <span v-bind:class="{active:a1,bold:a2}">222</span>
    </div>
    <script>
        var app2=new Vue({
            el:'.app2',
            data:{
                a1:false,
                a2:true
            }
        })
    </script>
    <div class="app3">
        <span v-bind:class="[a,b]">111</span>
    </div>
    <script>
        var app3=new Vue({
            el:'.app3',
            data:{
                a:'active',
                b:'bold'
            }
        })
    </script>
    <div class="app0">
        <span v-bind:class="obj">111122222</span>
    </div>
    <script>
        var app0=new Vue({
            el:'.app0',
            data:{
                obj:['act','bod','cc']
            }
        })
    </script>
    <h6>改变内联样式</h6>
    <div class="app4">
        <span  v-bind:style="{color:co,fontSize:font+'px'}">11111</span>
    </div>
    <script>
        var app4=new Vue({
            el:'.app4',
            data:{
                co:'green',
                font:32
            }
        })
    </script>
    <div class="app5">
        <span v-bind:style="obj">6666666666666666</span>
    </div>
    <script>
        var app5=new Vue({
            el:'.app5',
            data:{
                obj:{
                    color:"red",
                    fontSize:"60px",
                    fontWeight:"bold",
                    fontStyle:"normal"
                }
            }
        })
    </script>
    View Code

    组件:

    <h6>dom解析</h6>
    <div class="app1">
        <div is="aa"></div>
    </div>
    <script>
        var app1=new Vue({
            el:'.app1',
            components:{
                "aa":{
                    template:"<div><span>111</span><br/><span>000</span></div>"
                }
            }
        })
    </script>
    <div class="app2">
        <my-component></my-component>
    </div>
    <script>
        Vue.component('my-component',{
            template:"<div v-on:click='message+=1'>{{message}}</div>",
            data:function(){
                return {message:111}
            }
        });
        var app2=new Vue({
            el:".app2"
        });
    </script>
    <div class="app3">
        <child a0="hello" a1="nihao" a2="nisha"></child>
    </div>
    <script>
        Vue.component("child",{
            props:["a0","a1",'a2'],
            template:"<span>{{a0}},{{a1}},{{a2}}232</span>"
        });
        var app3=new Vue({
            el:".app3"
        })
    </script>
    <div class="app4">
        <child a0="hello"></child>
        <child a1="world"></child>
        <child a2="nihao"></child>
    </div>
    <script>
        Vue.component("child",{
            props:['a0','a1','a2'],
            template:'<span>{{a0}}{{a1}}{{a2}}</span>'
        });
        var app4=new Vue({
            el:'.app4'
        })
    </script>
    <div class="app5">
        <child></child>
    </div>
    <div class="app6">
        <child></child>
    </div>
    <script>
        Vue.component("child",{
            template:"<p>111</p>"
        });
        var app5=new Vue({
            el:'.app5'
        });
        var app6=new Vue({
            el:'.app6',
            template:"<p>123231</p>"
        })
    </script>
    <div class="app6">
        <input v-model='msg'/>
        <child v-bind:message="msg"></child>
    </div>
    <script>
        Vue.component("child",{
            props:['message'],
            template:"<span>{{message}}</span>"
        });
        var app6=new Vue({
            el:'.app6',
            data:{
                msg:111
            }
        })
    </script>
    View Code

    表单元素:

    <div class="app1">
        <input type="text" v-model="msg"/>
        <span>{{msg}}</span>
    </div>
    <script>
        var app1=new Vue({
            el:'.app1',
            data:{
                msg: 'a123'
            }
        })
    </script>
    <div class="app2">
        <input type="radio"  value="男" name="sex" v-model="picked"/><input type="radio"  name="sex" value="女" v-model="picked"/><span>
            checked:{{picked}}
        </span>
    </div>
    
    <script>
        var app2=new Vue({
            el:'.app2',
            data:{
                picked:""//radio:此处字符串中显示的是默认选中的单选框中的value值
            }
        })
    </script>
    <div class="app3">
        <select v-model="opt">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
        </select>
        <span>
            selected:[{{opt}}]
        </span>
    </div>
    <script>
        var app3=new Vue({
            el:'.app3',
            data:{
                opt:"1"//此处值为1,则表示默认选中1
            }
        })
    </script>
    <div class="app4">
        <input type="checkbox" value="香蕉" v-model="picked"/>香蕉
        <input type="checkbox" value="柚子" v-model="picked"/>柚子
        <span>已选择:{{picked}}</span>
    </div>
    <script>
        var app4=new Vue({
            el:'.app4',
            data:{
                picked:[]//复选框:此处是数组则默认把选中的value值显示在数组中,如果为字符串,则选中为true,不选为false
            }
        })
    </script>
    <div class="app5">
        <select multiple v-model="picked" style=" 50px">
            <option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
            <option>5</option>
            <option>6</option>
        </select>
        <span>
            selected:{{picked}}
        </span>
    </div>
    <script>
        var app5=new Vue({
            el:'.app5',
            data:{
                picked:[]
            }
        })
    </script>
    <div class="app6">
        <select v-model="picked">
            <option v-for="item in opts" v-bind:value="item.name">
                {{item.name}}
            </option>
        </select>
        <span>
            已选择:{{picked}}
        </span>
    </div>
    <script>
        var app6=new Vue({
            el:'.app6',
            data:{
                picked:'',
                opts:[
                    {name:11},
                    {name:22},
                    {name:33}
                ]
            }
        })
    </script>
    <div class="app7">
        <input type="checkbox" v-model="picked"/>aaa
        <span>{{picked}}</span>
    </div>
    <script>
        var app7=new Vue({
            el:'.app7',
            data:{
                picked:''
            }
        })
    </script>
    <div class="app8">
        <input type="checkbox" v-model="aa" v-bind:true-value="a" v-bind:false-value="b"/>选择
        <span>{{aa}}</span>
    </div>
    <script>
        var app8=new Vue({
            el:'.app8',
            data:{
                aa:'',
                a:12,
                b:1221
            }
        })
    </script>
    View Code

     计算属性:

    <div class="app1">
        <p>
            内容内容    {{message}}
        </p>
        <p>
            neirongneirong   {{reverseMsg}}
        </p>
        <p>
            我是缓冲数据{{reverse()}}
        </p>
    </div>
    <script>
        var app1=new Vue({
            el:'.app1',
            data:{
                message:'abcdb869021'
            },
            computed:{
                reverseMsg:function(){
                    return this.message.split("").reverse().join("")
                }
            },
            methods:{
                reverse:function(){
                    var arr=this.message.split("");
                    arr.splice(2,0,"666");
                    return arr;
                }
            }
        })
    </script>
    View Code

     数组更新检测:

    当data中的值为数组时,可直接调用下边的方法  如:example1.items.push({ message: 'Baz' }) 。

    • push()  pop()  shift()  unshift()  splice() sort() reverse()
            app3.items.reverse();//倒序
            app3.items.splice(0,0,{name:12});//新增
            app3.items[1].name=11;//改变某一项值

     修饰符:

    <!-- 阻止单击事件继续传播 -->
    <a v-on:click.stop="doThis"></a>
    <!-- 提交事件不再重载页面 -->
    <form v-on:submit.prevent="onSubmit"></form>
    <!-- 修饰符可以串联 -->
    <a v-on:click.stop.prevent="doThat"></a>
    <!-- 只有修饰符 -->
    <form v-on:submit.prevent></form>
    <!-- 添加事件监听器时使用事件捕获模式 -->
    <!-- 即内部元素触发的事件先在此处处理,然后才交由内部元素自身进行处理 -->
    <div v-on:click.capture="doThis">...</div>
    <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
    <!-- 即事件不是从内部元素触发的 -->
    <div v-on:click.self="doThat">...</div>

     混合:

    var myMixin={
            created:function(){
                this.hello();
                this.world();
    
            },
            methods:{
                hello:function(){
                    console.log('hello')
                },
                world:function(){
                    console.log('world')
                }
            }
        };
        var components=Vue.extend({//定义一个实用混合对象的组件
            mixins:[myMixin]
        });
        myComponents=new components();
    var mixin={
           methods:{//选项合并
               hello:function(){
                   console.log("hello")
               },
               world:function(){
                   console.log("world");
               }
           }
        };
        var vm=new Vue({
            mixins:[mixin],
            methods:{
                a:function(){
                    console.log(1)
                },
                b:function(){
                    console.log(2)
                }
            }
        });
        vm.hello();
        vm.world();
        vm.a();
        vm.b();
  • 相关阅读:
    Git最强总结!
    强烈IDEA这些插件,让你的开发速度飞起来!
    MySQL执行计划【explain】详解
    设置php在apache下加载ini配置文件路径,~和curl扩展无法加载的问题
    远程连接mysql数据慢的问题
    在windows下,git webhook使用php拉取代码的学习总结
    centos 添加epel、remi仓库和ELRepo仓库
    windows下mysql数据库表名大小写不敏感
    .gitignore无效,不能过滤某些文件
    编译php时,出错bad interpreter
  • 原文地址:https://www.cnblogs.com/dongxiaolei/p/7845484.html
Copyright © 2020-2023  润新知