vue(二)

vue 郑士旭
文章标签: vue

vue基础知识

1.模板的基础用法

    <div id="app">
        <!-- mustache标签 -->
        <!-- v-text  v-html -->
        <p>{{message}}</p>
        <p v-text="message"></p>
        <p v-html="message"></p>
        <p>hello {{message}}</p>
        <!-- v-bind -->
        <div>
            <ul>
                <li v-for="i in 10" v-bind:id="'list'+i" v-text="i"></li>
            </ul>
        </div>
        <!-- disabled -->
        <button v-bind:disabled="foo">显示</button>
        <!-- 不显示dis属性 -->
        <button v-bind:disabled="foo1">显示</button>
        <!-- js表达式 -->
        <p>{{school}}</p>
        <!-- v-bind缩写  v-on缩写 -->
        <p :id="message"></p>
        <p @click="dl" v-text="message"></p>
        <p v-bind:class="cla"></p>
    </div>
    
    var school="hello";
    var app=new Vue({
        el:"#app",
        data:{
            cla:"hakgfkuwfh",
            message:"app",
            foo:true,
            foo1:false,
            school,// school=>school:school,
        },
        methods:{
            dl:function(){
                this.message=this.message.split("").reverse().join("");
            }
        }
    })

2.计算属性和侦听器

监听事件watch实时监测数据的改变,computed属性相对于方法来说可以缓存起来,再次调用的时候就不需要再调用了

    <div id="app">
        <p>{{message}}</p>
        <p>{{res}}</p>
        <input type="text" v-model="firstName">+<input type="text" v-model="lastName">={{fullName}}
        <p><input type="text" v-model="fullName"></p>
        <input type="text" v-model="message">
    </div>
    <div id="watch-example">
        <p>
            Ask a yes/no question:
            <input v-model="question">
        </p>
        <p>{{ answer }}</p>
    </div>
    
    var vu=new Vue({
        el:"#app",
        data:{
            message:"hello word",
            firstName:"",
            lastName:"",
        },
        computed:{
            res(){
                return this.message.split("").reverse().join("");
            },
            fullName:{
                get(){
                    return this.firstName+" "+this.lastName;
                },
                set(newv){
                    var newValue=newv.split(" ")
                    this.firstName=newValue[0]
                    this.lastName=newValue[1]
                    // return this.firstName+" "+this.lastName
                }
            }
        },
        watch:{
            message(newn,oldn){
                console.log(newn,oldn);
            }
        }
    })

3.v-for v-if  v-show  等方法使用,数据变化的实时跟踪和检测

<div id="app">
        <template>
            <p v-if="pd">
                v-if   {{pd}}
            </p>
            <p v-else>
                v-else   {{pd}}
            </p>
        </template> 
        <!-- v-show不能和template一起出现,改变的是html的内容 -->
        <div v-show="dis">
            显示隐藏
        </div>     
        <h3>v-for使用</h3>
        <h4>数组</h4>
        <ul>
            <li v-for="(item,index) in score">
                {{item}}+{{index}}
            </li>
            <li v-for="scoos in scoo">{{scoos.add}}</li>
        </ul>
        <div>
            <div v-if="dis">
                <label>邮箱</label><input type="text" placeholder="邮箱" key="yx">
            </div>
            <div v-else>
                <label>手机</label><input type="text" placeholder="手机" key="sj">
            </div>
            <p><button type="button" @click="dis=(dis==false?true:false)">切换</button></p>
        </div>
        <!-- {{b}} -->
        <div>
            <ul>
                <li v-for="item in items">{{item}}</li>
            </ul>
        </div>
        <div>
            <label>姓名</label>{{obj.name}}
            <label>年龄</label>{{obj.age}}
            <label>性别</label>{{obj.sex}}
            <label>地址</label>{{obj.addr}}
        </div>
        <div @click="ts">点击</div>
        <button @click="cl('mesaa',$event)">点击</button>
        <div>
            <div @click="cona()">
                <div>
                    <button @click="con">点击</button>
                    <button @click.stop="con">点击</button>
                    <!-- 阻止冒泡事件 -->
                </div>
            </div>
        </div>
        <label>提交</label><input type="text" @keyup.enter="go">
        <!-- 组合事件 ctrl+click -->
        <div @click.ctrl="doSomething">Do something</div>
        <!-- alt+c -->
        <input type="text" @keyup.alt.67="clear">
        <!-- 鼠标点击事件 -->
        <button type="button" @click.left="le" @click.right="ri($event)">点击点击</button>
    </div>

  var vm=new Vue({
        el:"#app",
        data:{
            pd:true,
            dis:false,
            score:[1,2,3,4,56,7],
            scoo:[{"add":2},{"add":3}],
            items:["a","b","c"],
            obj:{"name":"张三",sex:"男"}
        },
        methods:{
            clear(){
                alert("al");
            },
            doSomething(){
                alert("123");
            },
            ts(){
                alert("1");
            },
            cl(mesaa,event){
                console.log(mesaa,event);
            },
            con(){
                alert("qwe");
            },
            cona(){
                alert("qwer");
            },
            go(){
                alert("成功");
            },le(){
                alert("左边");
            },ri(event){
                event.preventDefault();
                alert("右边");
            }
        }
    })
    // vm.b=2;不能动态的监测变化
    vm.$set(vm.scoo,"add",4);
    vm.$forceUpdate();//强制更新  数组的下标调用和长度都是没用的
    // 弥补的方法
    // vm.$set(target,key,value)
    // Vue.set(target,key,value)
    // vm.items.splice(key,1,value)
    // key可以是下标也可以是key值
    // vm.items.splice(0)改变数组的长度
    vm.obj=Object.assign({},vm.obj,{"age":20,"addr":"hh"})

4.

<div id="app">
<label>爱好</label>
<input type="checkbox" value="打篮球" v-model="hobby">打篮球
<input type="checkbox" value="踢足球" v-model="hobby">踢足球
<input type="checkbox" value="羽毛球" v-model="hobby">羽毛球
{{hobby}}
<h3>单选</h3>
<input type="radio" value="nan" v-model="sex">
<input type="radio" value="nv" v-model="sex">
{{sex}}
<h3>选择框</h3>
<select name="sel" id="sl" v-model="sel">
<option value="1">11</option>
<option value="2">22</option>
<option value="3">33</option>
<option value="4">44</option>
</select>
{{sel}}
<h3>修饰符</h3>
<input type="text" v-model.lazy="ljz">{{ljz}}
<p>
<input type="number" v-model.number="age">{{age}}
</p>
<p>
<input type="text" v-model.trim="mesg">{{mesg.length}}
</p>
</div>var vm=new Vue({
el:"#app",
data:{
hobby:[],
sex:"nv",
sel:"2",
ljz:"",//懒加载
age:"",//输入值转为数值类型
mesg:"",//去空格
}
})

拓展:今天写购物车的练习的时候关于动态监听一堆input框的时候学到了一个深度监听的方法,可以监听数组,数据等的变化

            watch:{
                buysp:{
                    handler(){
                        this.allmon();
                    },
                    deep:true,
                },
            },

还能输出{{restrictNumber}}个字符  
  • {{reply.author}}

    {{CommonUtil.formateDate(reply.ac_CommentDate).shortTime}}
  • 回复了{{Comments.author}} :