Vue语法

第一个Vue示例:

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id = 'd1'>
        <p>name:{{name}}</p>
        <p>age:{{age}}</p>
    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",  // 绑定标签
        data:{
            name:"qingqiu",
            age:17,
        }
    })
</script>
</html>

  每一个vue实例,都需要划分一块地方,给予vue来放置东西。

  首先,需要实例化一个vue对象。

  el:"一般使用标签的id"。

  data:{ 放置数据的位置 }

 

数据和方法:

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id = "d1">
        <p>name:{{name}}</p>
        <p>age:{{age}}</p>
    </div>
</body>
<script src="vue.js"></script>
<script>
    var info = {
        name:"qingqiu",
        age:17
    };

// 可以先创建一个变量包含了信息,然后再将之传入data
    var app = new Vue({
        el:"#d1",
        data:info
    })
</script>
</html>

 

模板语法:

  v-html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <p>{{msg1}}</p>
        <p>{{msg2}}</p>   <!-- 若是不加v-html,将会以字符串的形式显示 -->
        <p v-html="msg2">{{msg2}}</p>   <!--标签属性加上 v-html="msg2(data中的键)",这样才会渲染标签。-->
    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",
        data:{
            msg1:"顾清秋",
            msg2:"<a href='https://www.baidu.com'>点击跳转</a>",
        },
    })
</script>
</html>

 

指令示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <p v-if="status">沉默着,走了有,多遥远</p>
        <!-- v-if="status" 表示这个标签如果status返回的是true则显示,如果是false则不显示标签-->
        <p v-show="status">抬起头,慕然间,才发现</p>
        <!--v-show="status" 表示这个标签如果status返回的是true则显示,如果是false则显示标签,不现实标签内的内容,
        只是相当于给标签加了个style="diplay:none"的样式-->
        <!-- 参数:
            一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,v-bind 指令可以用于响应式地更新 HTML 特性:
         -->
        <p><a v-bind:href="url">点击跳转</a></p>
        <!-- v-bind:href="url" 在这里 href 是参数,告知 v-bind 指令将该元素的 href 特性与表达式 url 的值绑定。 -->

        <p><button v-on:click="click">点击事件</button></p>
        <!-- v-on:click="click" v-on 用于监听事件,紧跟的click是事件名.最后的“click”是被绑定的methods中的方法 -->

        <form action="" v-on:submit.prevent="submit">
            <!-- 监听submit事件,并阻止页面的刷新:submit.prevent -->
            <input type="text">
            <input type="submit">
        </form>
    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",
        data:{
            status:true,
            url:"https://www.baidu.com",
        },
        //methods中是专用来放置方法
        methods:{
            click:function(){
              alert("点击事件")
            },
            submit:function(){
                alert("阻止form的刷新页面")
            },
        },
    })
</script>
</html>

 

计算属性和侦听器:

  Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <p>{{msg}}</p>
        <p>{{msg.split("").reverse().join("")}}</p>

        <p>{{reversemsg()}}</p>
        <!--上面的是方法:方法时每次都会被调用,也就是每次都会重新执行一遍-->
        <p>{{reversemsg2}}</p>
        <!--上面的是属性:属性只会在更新的时候执行一次,以后除非属性更改,否则就不会再次执行,只会在缓存中拿取值。-->

        <p>{{quanming}}</p>
        <p>{{quanming2}}</p>
        <!--动态属性一般放置在computed中-->

    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",
        data:{
          msg:"12345",
          ming:"清秋",
          xing:"",
          quanming:"顾 清秋"
        },
        methods:{
            reversemsg:function(){
              console.log("这是一个方法");
              return this.msg.split("").reverse().join("")
            },
        },
        computed:{
          //计算属性
          reversemsg2:function(){
              console.log("这是属性");
              return this.msg.split("").reverse().join("")
          },
          quanming2:function(){
              return this.xing + this.ming
          },
        },

        //侦听器:实时会根据属性的更改而执行一些命令
        watch:{
            //val 就是属性的值。
            xing:function(val){
                this.quanming = val + this.ming
            },
            ming:function(val){
                this.quanming = this.xing + val
            },
        },
    })

</script>
</html>

 

class 与 style:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c{
            height: 200px;
            width: 200px;
            border-radius: 50%;
            background-color: red;
        }
        .c1{
            background-color: green;
        }
    </style>
</head>
<body>
    <div id="d1">
        <div  class="c" v-bind:class="{c1:status}" v-on:click="change"></div>
        <!-- v-bind 绑定class 若是status为true则添加class="c1"-->
        <!-- v-on 监听点击事件,执行change指向函数中的操作-->
    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",
        data:{
            status:false,
        },
        methods:{
            change:function(){
                this.status = !this.status
                // 状态反转:给同一个变量每次赋予相反的值。
            },
        }
    })
</script>
</html>

 

条件渲染:

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <template v-if="status">
            <p>沉默着,走了有,多遥远</p>
            <p>抬起头,慕然间,才发现</p>
            <p>一直倒退</p>
        </template>
        <p v-else>忘记时间</p>
        <!-- 同if else语句 若status为true则显示if语句,否则显示else语句 -->
        <hr>
        <ul>
            <li v-for="i in list">{{i}}</li>
        </ul>
        <hr>
        <ul>
            <li v-for="i,index in list">{{index}}:{{i}}</li>
            <!--for循环的第一个变量就是值,第二个是索引,值永远是第一个-->
        </ul>
        <hr>
        <ul>
            <li v-for="v,k,i in obj">{{i}}:{{k}}:{{v}}</li>
            <!--第一个值也是值,第二个是键,第三个是索引-->
        </ul>
    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",
        data:{
          status:true,
          list:[
              "吃饭",
              "睡觉",
              "打豆豆",
          ],
          obj:{
              name:"清秋",
              age:17
          }
        },
    })
</script>
</html>

 

表单绑定:

  你可以用 v-model 指令在表单 <input> 及 <textarea>元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

  v-model 会忽略所有表单元素的value,checked,selected特性的初始值而总是将Vue实例的数据作为数据来源,所以应该通过JavaScript在组件的data选项中声明初始值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <input type="text" v-model.trim="msg">
        <!--v-model 双向绑定,实时获取更新数据
        trim:去除空格-->
        <p>{{msg}}</p>
        <hr>
        <div id="example-3">
            <input type="checkbox" id="jack" value="basketball" v-model = "hobby">
            <label for="jack">篮球</label>
            <input type="checkbox" id="john" value="football" v-model = "hobby">
            <label for="john">足球</label>
            <input type="checkbox" id="mike" value="tennis" v-model = "hobby">
            <label for="mike">网球</label>
            <br>
            <span>我的爱好:{{hobby}}</span>
        </div>
    </div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el:"#d1",
        data:{
            msg:'',
            hobby:[],
        },
    })
</script>
</html>

 

小清单示例:

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            color: green;
        }
        .c2{
           text-decoration: line-through;
        }
    </style>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
</head>
<body>
<div class="contanier " style="margin-top: 100px">
    <div class="row">
        <div id="d1" class="col-md-6 col-md-offset-3">
            <div class="panel panel-info">
                <div class="panel-heading">
                    <h3 class="panel-title">小清单</h3>
                </div>
                <div class="panel-body">
                    <!--输入框开始-->
                    <div class="input-group">
                        <input v-model="item.title" type="text" class="form-control" placeholder="Search for...">
                        <span class="input-group-btn">
                        <button v-on:click="add" class="btn btn-default" type="button"><span
                                class="glyphicon glyphicon-plus"></span></button>
                        </span>
                    </div>
                    <!--输入框结束-->
                    <hr>
                    <!--列表组开始-->
                    <div class="list-group">
                        <div id="event" v-for="(items,index) in eventlist" class="list-group-item" v-bind:class="{c2:items.status}">
                            <span class="glyphicon glyphicon-ok-sign"  v-bind:class="{c1:items.status}" v-on:click="change(index)">&nbsp;</span>
                                {{items.title}}
                            <span v-on:click="remove(index)" class="glyphicon glyphicon-remove pull-right"></span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el: "#d1",
        data: {
            eventlist: [],
            item:{
                status:false,
                title:"",
            }
        },
        methods: {
            change:function(index){
                alert(index);
                this.eventlist[index].status = !this.eventlist[index].status;
            },
            add:function(){
                var obj = Object.assign({},this.item);
                this.eventlist.push(obj);
                this.item.title="";
            },
            remove:function(index){
                this.eventlist.splice(index,1);
            }
        },
    })
</script>
</html>
小清单

 

posted @ 2018-07-24 22:14  Qingqiu_Gu  阅读(685)  评论(0编辑  收藏  举报