vue指令合集

注意:

1、所谓指令,其实就是元素的属性

2、所有的指令,前提是在js中声明了是Vue对象

3、参数

1、静态参数:一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,v-bind 指令可以用于响应式地更新 HTML attribute:

<a v-bind:href="url">...</a>

此处的href是参数

<a v-on:click="doSomething">...</a>

v-on 指令,它用于监听 DOM 事件,在这里参数是监听的事件名

2、动态参数:可以用方括号括起来的 JavaScript 表达式作为一个指令的参数:例如:(动态参数不是太理解)

<a v-bind:[attributeName]="url"> ... </a>

这里的 attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的 Vue 实例有一个 data 属性 attributeName,其值为 "href",那么这个绑定将等价于 v-bind:href。

同样的你可以使用动态参数为一个动态的事件名绑定处理函数:

<a v-on:[eventName]="doSomething"> ... </a>

在这个示例中,当 eventName 的值为 "focus" 时,v-on:[eventName] 将等价于 v-on:focus。

实例:  点击会有弹窗的出现

    <a href="" id="add" v-on:[whos]="tanChuang">{{message}}</a>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                message: "张浩琦",

                whos: "click",

            },

            methods: {

                tanChuang: function() {

                    alert(123456)

                }

            }

        })

            </script>

3、在我们的模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持。

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>

以下符合逻辑但是不是表达式的也不会生效

<!-- 这是语句,不是表达式 -->

{{ var a = 1 }}

<!-- 流控制也不会生效,请使用三元表达式 -->

{{ if (ok) { return message } }}

v-text指令

设置标签的文本值(textContent)

1、v-text已经将文本的内容替换,所以源文本的内容不会显示

2、{{content}}实在原来的文本的基础上进行拼接。

<div id="add">

v-text的使用:

        <!-- h2的内容被message的v-text指向 -->

        <h2 v-text="message">

            <!-- 因为有v-text,所以{{info}}里面的内容显示不出来 -->

            {{ info }}

            <!-- </h2>

        此时文本的内容 “深圳”也显示不出来 -->

            <h2 v-text="info">

                深圳

            </h2>

           

{{}}的使用:

            <!-- {{message}}表示拼接,所以此时的深圳可以显示出来 -->

            <h2>

                {{message}}深圳

            </h2>

           

v-text拼接文本  :

              <!-- v-text拼接文本 -->

            <h2 v-text="info+'我是v-text拼接的字符串'"></h2>

            <!-- v-text插入多个属性文本 -->

            <h2 v-text="info+message"></h2>

           

    </div>

    <script>

   

        var app = new Vue({

            el: "#add",

            data: {

                message: "黑马程序员",

                info: "白马程序员"

            }

        })

    </script>

v-once指令

通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:

<span v-once>这个将不会改变: {{ msg }}</span>

msg只随着属性的变化而变化一次

v-html指令

设置元素的innerHTML

1、更新文本的值,直接将原文本替换,和v-html差不多

2、当v-html指向的内容符合HTML标签的形式时,会生成新的标签。

  <div id="add">

 

v-html更新文本 

        <!-- 黑马程序员被替换为白马程序员黄马程序员绿马程序员 -->

        <span v-html="content+info+'绿马程序员'">黑马程序员</span>

     

v-html新增标签

        <!--如果v-html指向的内容符合标签的形式,则生成一个html标签-->

        <!-- 原div里面的内容全部都被替换,生成一个内容为程序员的span标签。 -->

       

        <div v-html="message">

        </div>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                content: "白马程序员",

                info: "黄马程序员",

                message: "<span>程序员</span>"

            }

        })

    </script>

v-html和v-text的对比

      <span v-html="weblink"></span><br>        //显示的是一个百度链接

       

        <span v-text="weblink"></span>          //显示的是<a href='www.baidiu.com'>百度链接</a>

         

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                weblink: "<a href='www.baidiu.com'>百度链接</a>"

            }

        })

    </script>

v-on指令

为元素绑定事件 监听DOM事件

1、格式

1、<input type="button" value="事件绑定"v-on:事件名="方法">

2、<input type="button" value="事件绑定" @事件名="方法">

事件名为常用事件 click mouseover 等

2、点击事件

<input type="button" value="事件绑定" v-on:click="方法">

或者 v-on:换成@

<input type="button" value="事件绑定" @click="方法">

3、直接更改属性的值

<button v-on:click="foo = 'baz'">Change it</button>

4、Vue写方法

      var app = new Vue({

            el: "add",

            data: {

                message: "张浩琦",

                foo:"123"

            },

            methods: {

                dolt: function() {

                      //逻辑

                }

            }

        })

5、触发函数

触发函数时会出现集中不同情况

1、一个按钮触发一个函数

  无参数时  方法的名称可以不加小括号

  <input type="button" id="add" value="点击触发函数" v-on:click="dolt">

 

2、一个按钮触发两个函数(两个函数都需要带小括号,执行顺序按照先后顺序)

<input type="button" id="add" value="点击触发函数" v-on:click="dolt()+dolttwo()">

   

   

    <script>

        var app = new Vue({

            el: "#add",

            data: {

                message: "张浩琦",

            },

            methods: {

                dolt: function() {

                    alert(this);

                },

                dolttwo: function() {

                    console.log(this); // this指的是当前创建的app这个Vue对象

                 

                    console.log(this.message); //张浩琦

                }

            }

        })

Vue的操作重在操作数据(文本域),而非操作Dom元素(操作Vue的时候时,需要使用this)

使用事件点击更改谋个标签的内容

点击之后,调用dolttwo方法,message的内容由张浩琦换成刘倩倩,span标签里面的内容也更改为现在的message内容

<span id="add" v-on:click="dolttwo">

        {{message}}

</span>

    <script>

        var app = new Vue({

            el: "#add",

            data: {

                message: "张浩琦",

            },

            methods: {

                dolt: function() {

                    alert(this);

                },

                dolttwo: function() {

                    this.message = "刘倩倩"

                  //this.message+="刘倩倩";

                  函数每调用一次,message后面就添加一个刘倩倩

                 

                  //this.message-="刘倩倩";

                  点击一次,显示Nan;

                }

            }

        })

    </script>

计数器的实战

0-10之间

<body>

    <div id="pss">

        <button class="one" @click="sub">减少</button>

        <span class="one" v-text="message"></span>

        <button class="one" @click="add">增加</button>

    </div>

    <script>

        var vm = new Vue({

            el: "#pss",

            data: {

                message: 0

            },

            methods: {

              add() {

                 

                    console.log(this)

                    if (this.message >= 10) {

                        this.message = 0;

                    } else {

                        this.message += 1;

                        //    或者

                    // this.message++;

                    }

                },

                sub() {

                    if (this.message <= 0) {

                        this.message = 10;

                    } else {

                        this.message -= 1;

                        //    或者

                    // this.message--;

                    }

                 

                    console.log(this)

                }

            }

        })

    </script>

</body>

v-on补充

传递自定义参数,事件修饰符@keyup后的.XXX(https://cn.vuejs.org/v2/api/#v-on)

方法传递参数 <input type="button" @click="doIt(p1,p2)">

键盘监听(以回车为例)

<input type="text" @keyup.enter="sayHi('小铁',555)">

或者 <input type="text" v-on:keyup.enter="sayHi('小铁',555)">

如果不加.enter,则按键盘上的任意按钮,都会调用sayHi('小铁',555)的方法

<div id="add">

        <!-- 鼠标  -->

        <input type="button" value="老铁666" @click="doIt('老铁',666)">

        <!-- 键盘 -->

        <input type="text" @keyup.enter="sayHi('小铁',555)">

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

            },

            methods: {

                //含有参数的方法

                doIt: function(p1, p2) {

                    console.log(p1, p2)

                },

                sayHi: function(p3, p4) {

                    console.log(p3, p4)

                }

            }

        })

    </script>

访问原生事件DOM对象$event

  <div id="add">

        <button v-on:click="warn($event)">访问原生事件对象</button>

        //如果此处参数是event,则输出的时候会报错

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

            },

            methods: {

                warn: function(event) {

                    console.log(event)

                }

            }

        })

    </script>

v-show指令

根据表达值的真假,切换元素的显示和隐藏(其实是操作元素的display)

1、< img src="" v-show="true">;true显示,false不显示

2、v-show里面的值还可以加判断

<div id="add">

v-show="false" 标签元素不显示

     

        <img src="./image/q1.jpg" alt="" v-show="false">

       

v-show="isShow" isShow的值为false  标签元素不显示

        <img src="./image/q2.jpg" alt="" v-show="isHidde">

       

v-show="isShow" isShow的值为true  标签元素显示 点击不显示

        <img src="./image/q2.jpg" alt="" v-show="isShow" @click="visPic">

       

v-show="age==16"显示,否则隐藏  此处v-show里面的值为boolean值

        <img src="./image/q3.jpg" v-show="age==16" alt="" @click="addAge">

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                isShow: true,

                isHidde: false,

            },

            methods: {

                visPic() {

                    //使isShow的值变为true

                    this.isShow = false

                    //或者

                    this.isShow = !this.isShow

                },

                //此方法每调用一次,age增加1

                addAge() {

                    this.age++;

                }

            }

        })

    </script>

v-if指令

根据表达式的真假,切换元素显示和隐藏(操纵Dom元素,而非样式,v-show操纵的是样式)

1、用法和v-show完全一样,v-if改变的是Dom元素的添加或删除,v-show改变的是样式,不会新增加Dom元素和删除Dom元素的

2、实际工作中,频繁切换的元素用v-show,反之用v-if,因为操作Dom消耗比较大。

v-if和v-else的使用

v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

<div id="add">

        <h1 v-if="awesome">张浩琦</h1>

        <h1 v-else>是的</h1>

        <h1></h1>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                awesome: false //此时显示的是  是的

                    //当为true时  显示的是张浩琦

            }

        })

    </script>

   

template元素,一个不可见的包裹元素

    <div id="add">

        <h1 v-else>是的</h1>

        <h1></h1>

        <template v-if="ok">

            <h1>Title</h1>

            <p>Paragraph 1</p>

            <p>Paragraph 2</p>

          </template>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

           

                ok: true  //此时template里面包裹的元素都可以显示出来。 如果不添加vue指令,不管是直接在template元素里面添加内容还是添加元素,template里面的内容都显示不出来

            }

        })

    </script>

v-else-if

  <div id="add">

        <template v-if="ok">

              <h3 v-if="type===A">A</h3>

              <h3 v-if="type===B">B</h3>

              <h3 v-if="type===C">C</h3>

              <h3 v-if="type===D">D</h3>

              <h3 v-else>没有选项了啊</h3>

          </template>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

             

                ok: true, //此时template里面包裹的元素都可以显示出来。 如果不添加vue指令,不管是直接在template元素里面添加内容还是添加元素,template里面的内容都显示不出来

                type: "132"  //此时网页显示的是没有选项了啊

            }

        })

    </script>

用key 管理可复用的元素

可复用元素举例 此处的表单元素即可复用元素 这样做其实是不符合实际的,要用key属性来解决

  <div id="add">

        <button v-on:click="change">点击切换</button>

        <!-- 点击之后,元素的内容改变,但是input已经输入的值却不发生改变, -->

        <template v-if="loginType === 'username'">

            <label>Username</label>

            <input placeholder="Enter your username">

            //更改为这个,元素里面的内容就会重新渲染,而不是重复使用 //<input placeholder="Enter your username"  key="one">

          </template>

        <template v-else>

            <label>Email</label>

            <input placeholder="Enter your email address">

            //这里也需要更改,不能和复用的元素的key值一样

            //<input placeholder="Enter your username"  key="two">

          </template>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                loginType: "username",

            },

            methods: {

                change: function() {

                    console.log(this.loginType)

                    this.loginType = "sef"

                    console.log(this.loginType)

                }

            }

        })

    </script>

v-bind指令

操作元素的属性(如:src,title,class等)

格式

1、< img v-bind:src ="imgSrc" >

2、< img v-bind:title="imgTitle+'123456'"> 拼接

3、< img v-bind:class="isActive?'active':''">三元表达式的形式表示判断,判断isActive的值,如果符合,class的属性值为active,如果不符合,class的属性值为空。(这种写法比较麻烦,可以采用对象的形式)

4、< img v-bind:class ="{active:isActive}"> 对象的形式表示判断,如果isActive的值为true,class的属性为active,否则class的属性为空

5、简写形式:< img :class ="{active:isActive}">(v-bind可以删除,但是在属性前需要加一个:)

  <div id="add">

        <!-- 为一个标签的属性赋予一个变量的值 -->

        <img v-bind:src="imgSrc"></img>

        为一个标签赋的属性赋予两个变量的值

        <span v-bind:class="[classes,changeColor]">

        <!-- 为一个标签的属性赋值,外加拼接 -->

        <span v-bind:title="imgTitle+'我是拼接的部分'">啦啦啦啦啦</span>

        <div v-bind:class="'active'+' '+'bgBorder'">

            <img src="./image/q2.jpg" alt="">

        </div>

        <div>

            <!-- 对象形式判断条件是否成立,成立变为块元素,不成立变为行元素 -->

            <span v-bind:class="{active:judge}">添加一个属性值</span>

            <!--待解决-->

            <!-- <span v-bind:class="{classes:judge}">判断并把vue对象的属性值作为此标签的class值</span> -->

            <br>

            <!-- 三元表达式形式判断添加一个和两个class属性值 -->

            <span v-bind:class="judge?'active':''">添加一个属性值</span>

            <span v-bind:class="judge?'active bgBorder':''">添加两个属性值</span>

        </div>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                imgSrc: "./image/q1.jpg",

                imgTitle: "这是一个标签",

                judge: true,

                classes: "fonts",

                changeColor: "red"

            }

        })

    </script>

   

综合写法

<div id="demo">

  <span :class="[one,{classA:classa,classB:classb}]"></span>

</div>

var vm = new Vue({

    el:"#demo",

    data:{

      one:"string",

      classa:true,

      classb:false

    }

})

效果 <span class = "string classA">

5、遗留问题

待解决

问题一:判断并把vue对象的变量作为此标签的class值

        <span v-bind:class="{classes:judge}">判断并把vue对象的属性值作为此标签的class值</span>

        //此时添加的span标签的class的属性值为classes而非fonts

       

解决方式:

   

       

问题二:    如何用对象的形式一次添加两个属性值

对象形式判断条件是否成立,成立变为块元素,不成立变为行元素

            <span v-bind:class="{active:judge}">添加一个属性值</span>

           

解决措施:两个属性值判断之间用逗号隔开

  <span v-bind:class="{active:judge,fonts:judge}">添加一个属性值41564156416</span>

 

           

           

           

           

            var vm = new Vue({

            el: "#add",

            data: {

                imgSrc: "./image/q1.jpg",

                imgTitle: "这是一个标签",

                judge: true,

                classes: "fonts"

            }

        })

v-bind指令的详细补充 包括样式的改变

修改class和style, v-bind指令与一半属性共存

对象语法

样式一:

.static {

            width: 100px;

            height: 100px;

            border: 1px solid red;

        }

       

        .backgroundcolor {

            background-color: green;

        }

       

        .divBig {

            width: 200px;

            height: 200px;

        }

<div id="add" class="static"  一半属性class  还可以添加v-bind属性 v-bind:class="{divBig:classOne,backgroundcolor:classTwo}">

        <span>1234656</span>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                classOne: true,  如果classOne为false,则divBig此类名属性则无法发挥作用

                classTwo: true

                与上同理

            }

        })

    </script>

   

样式二:将所有的样式写在一个属性对象中

.active {

            width: 100px;

            height: 100px;

            background-color: red;

        }

<div id="add" v-bind:class="classObject"></div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                classObject: {

                    //此时的类名为active

                    active: true,

                    ' text-danger': false

                }

            }

        })

    </script>

   

使用计算属性(看不懂)

  <div id="app" v-bind:class="classObject">

    </div>

    <script>

        var vm = new Vue({

            el: "#app",

            data: {

                active: true,

                error: null

            },

            computed: {

                classObject: function() {

                    return {

                        active: this.active && !this.error,

                        'text-danger': this.error && this.error.type === 'fatal'

                    }

                }

            }

        })

    </script>

   

   

   

数组语法

可以把一个数组传给 v-bind:class,以应用一个 class 列表:

样式一:将对象存入到数组中

        .active {

            width: 100px;

            height: 100px;

        }

       

        .error {

            background-color: red;

        }

       

       

       

       

<div id="add" v-bind:class="[activeClass,errorClass]">

    </div>

   

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                activeClass: "active",

                errorClass: "error",

            }

        })

    </script>

   

样式二:三元表达式形式

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

  .active {

            width: 100px;

            height: 100px;

        }

       

        .error {

            background-color: red;

        }

  <!-- 三元表达式,判断属性 -->

    <div id="add" v-bind:class="[activeClass,panduan?'':errorClass]">

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                activeClass: "active",

                errorClass: "error",

                panduan: false,

            }

        })

    </script>

对象语法在数组中使用

        .active {

            width: 100px;

            height: 100px;

        }

       

        .error {

            background-color: red;

        }

       

        .question {

            border: 10px solid black;

        }

<!-- 数组语法和对象语法的混合使用 -->

    <div id="add" v-bind:class="[{active:activeClass,error:errorClass},questionClass]"></div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                activeClass: false,

                errorClass: true,

                questionClass: "question"

            }

        })

    </script>

   

用在组件上(没有操作过,官方原文档)

当在一个自定义组件上使用 class 属性时,这些 class 将被添加到该组件的根元素上面。这个元素上已经存在的 class 不会被覆盖。

例如,如果你声明了这个组件:

Vue.component('my-component', {

  template: '<p class="foo bar">Hi</p>'

})

然后在使用它的时候添加一些 class:

<my-component class="baz boo"></my-component>

HTML 将被渲染为:

<p class="foo bar baz boo">Hi</p>

对于带数据绑定 class 也同样适用:

<my-component v-bind:class="{ active: isActive }"></my-component>

当 isActive 为 truthy[1] 时,HTML 将被渲染成为:

<p class="foo bar active">Hi</p>

绑定内联样式

v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:

当 v-bind:style 使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex。

<div id="add" v-bind:style="[{color:activeColor,fontSize:fontSize+'px'},styleObject]">

        张浩琦

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                activeColor: 'yellow',

                fontSize: '30',

                styleObject: {

                    border: "20px solid red",

                    width: "200px",

                    height: "200px"

                }

            }

        })

    </script>

使用方法和class的更改差不多   

   

v-for指令

根据数据生成列表结构(列表的生成依赖数据,所以在data里面建立)

v-for指定的内容会随着vue对象的数据的改变而进行dom节点数量的改变

语法:

语法一:列表的每一项内容为数组的内容(列表里面如果有原内容,则原内容每一次都会被打印)

<div id="app>

<ul>

<li v-for="item in arr">张浩琦{{item}}</li>

//item是遍历的每一项,可以改名字,但是得遵循命名规则

//in 关键字 不能修改

//arr 要循环的数据名

//如果li标签里面原本就有内容,例如“张浩琦”,那么遍历的每一项数据生成的节点都是张浩琦

</ul>

</div>

var app = new  Vue({

    el:"#app",

    data:{

        arr:[1,2,3,4,5]

    }

})

结果

张浩琦

张浩琦

张浩琦

张浩琦

张浩琦

语法中的内容不一样

  内容用一个对象储存

 

<html>

<div id="edd">

        <ul>

            <button @click="add">增加</button>

            <button @click="remove">移除</button>

            <li v-for="item in objArr" v-bind:title="item.name">

                {{item.name}}

            </li>

        </ul>

    </div>

   

   

<script>

var am = new Vue({

            el: "#edd",

            data: {

                //绑定一个对象的数组

                objArr: [{

                    name: "张浩琦"

                }, {

                    name: "刘倩倩"

                }, {

                    name: "花粥"

                }]

            },

            methods: {

                add: function() {

                    //push增加 方法,方法没执行一次,对象数组objArr里面增加一个对象“张雨墨”

                    this.objArr.push({

                        name: "张雨墨"

                    })

                },

                remove: function() {

                    //shift()  删除最左边的元素,方法每执行一次,数组里面就移除一个objArr最里面的一个对象

                    this.objArr.shift()

                }

            }

        })

       

       

        内容显示出数据的索引

        <li v-for="(item,index) in arr">

                {{index}}{{item}}

          </li>

         

          var bm = new Vue({

                el: "#app",

                data: {

                    arr: [1, 2, 3, 4, 5]

                }

            })

v-for里使用值范围

<div id="add">

        <li v-for="n in 10">{{n}}</li>

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

            }

        })

    </script>

    结果1-10

v-model(model 模型;典型;模特儿)

便捷获取和设置表单元素的值(双向数据绑定) 需要和表单元素一起使用

双向绑定即当message的内容改变,表单的内容会随着改变,表单的内容改变,message的内容也会随着改变

  <div id="add">

        <input type="text" v-model="message">

        <!-- span里面的内容会随着message的变化而变化,message会随着表单录入的内容变化而变化 -->

        <span>{{message}}</span>

        <input type="button" value="点击更改message的内容为刘倩倩" @click="add">

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                message: "张浩琦"

            },

            methods: {

                add: function() {

                    this.message = "刘倩倩"

                }

            }

        })

    </script>

修饰符(不是太清楚)

.lazy(懒加载)

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

<div id="add">

没有.lazy

        <input type="text" v-model="message" v-on:change="nub">

        <!-- 当表单中的值发生改变时,会调用nub方法,但是v-model控制的对象属性导致表单的值发生改变时,并不会调用nub方法 -->

        <button v-on:click="change">点击更改</button>

       

加上.lazy

<input type="text" v-model.lazy="message">

  <span>

            {{message}}

        </span>

span中的值并不会随着message的改变而同步改变,只有表单失去焦点时,span中的值才会同步改变,类似于change

    </div>

    <script>

        var vm = new Vue({

            el: "#add",

            data: {

                message: "张浩琦"

            },

            methods: {

                change: function() {

                    this.message = "刘倩倩"

                },

                nub: function() {

                    alert("15465")

                }

            }

        })

    </script>

<!-- 在“change”时而非“input”时更新 -->

<input v-model.lazy="msg" >

.number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

<input v-model.number="age" type="number">

这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。

.trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg">

.ref像v-model一样,实现数据的双向绑定(主要是为了获取当前的元素对象input对象)

<div id="add">

        <!-- ref目的:获取表单的内容,并把内容赋值给span标签,间接实现双向绑定  类似于v-model -->

        <!-- 获取表单的内容要获取事件,此处使用的是keyup,键盘每按下一次,就调用一次方法 -->

        <input type="text" ref="name" @keyup="getName">

        <span>{{name}}</span>

        <input type="text" ref="age" @keyup="getAge">

        <span>{{age}}</span>

    </div>

    <script>

        new Vue({

            el: "#add",

            data: {

                name: " ",

                age: 32

            },

            methods: {

                getName: function() {

                    console.log(this.$refs);

                    //  相当于ref的父级,包含了标签中ref的所有内容  所以此处输出的也有age的内容

                },

                getAge: function() {

                    console.log(this.$refs.age.value);

                }

            }

        })

    </script>

项目实战

小黑记事本项目

学到的内容

1、数组元素的长度 content.length

2、 this.content.splice(index, 1); 删除指定的索引内容,如果是2,则删除当前索引内容和之后的那个索引内容

  <div id="littleBlack">

        <!-- 回车键向表格中录入内容,q键清除表格中的所有内容 -->

        <input type="text" v-model="message" @keyup.enter="addContent" @keyup.q="clearAll">

        <ul>

            <li v-for="(item,index) in content" @click="remove(index)">{{index+1}}{{item}}</li>

        </ul>

        <!-- 统计列表中元素的个数即统计数组的长度  当数组的长度为0时,隐藏此项功能-->

        <span v-text="'个数'+content.length" v-if="content.length!=0"></span>

    </div>

    <script>

        var vm = new Vue({

            el: "#littleBlack",

            data: {

                message: "泡面",

                content: ["吃饭饭", "睡觉觉", "敲代码"]

            },

            methods: {

                addContent: function() {

                    this.content.push(this.message);

                    this.message = " ";

                },

                remove: function(index) {

                    console.log(index);

                    //splice(index,1)删除指定的索引,一次删除一个元素  如果是2删除索引和索引后面的元素

                    this.content.splice(index, 1);

                },

                clearAll: function() {

                    this.content = " ";

                }

            }

        })

    </script>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 深入响应式 追踪变化: 把普通js对象传给Vue实例的data选项,Vue将使用Object.defineProp...
    冥冥2017阅读 4,831评论 6 16
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,177评论 0 6
  • vue.js简介 Vue.js读音 /vjuː/, 类似于 viewVue.js是前端三大新框架:Angular....
    LiWei_9e4b阅读 479评论 0 0
  • 本文是lhyt本人原创,希望用通俗易懂的方法来理解一些细节和难点。转载时请注明出处。文章最早出现于本人github...
    lhyt阅读 2,181评论 0 4
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,882评论 1 4