zoukankan      html  css  js  c++  java
  • 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>
    小清单
  • 相关阅读:
    原型污染
    C#之抛异常
    为什么['1', '7', '11'].map(parseInt) returns [1, NaN, 3]?
    Linux
    Linux
    Linux
    Linux
    Linux
    Linux
    其他
  • 原文地址:https://www.cnblogs.com/stfei/p/9363012.html
Copyright © 2011-2022 走看看