reversedMessage: function () { // `this` 指向 vm 实例 return this .message.split('').reverse().join('' )

这样,我们使用模板语言,就可以直接插入reversedMessage:

<div id="example">
  <p>message: "{{ message }}"</p>
  <p>reversed message: "{{ reversedMessage }}"</p>
</div>

二、侦听器

侦听器是用来侦听某个属性是否被改变的。例如修改message:

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <title>Watch</title>
</head>
<div id="app">
    <p>{{ message }}</p>
    <button @click="clickHandler">修改</button>
</div>
<script src="static/vue.js"></script>
<script>
    new Vue({
        el: "#app",
        data() {
            return {
                message: "leo"
        methods: {
            clickHandler() {
                this.message = 'Alex';
        watch: {
            'message': function (value) {
                //todo...
                alert("message被修改了");
</script>
</body>
</html>

当我们点击修改按钮的时候,message从"leo"被修改为"Alex",此时该修改操作会被watch侦听器所发现,并在修改之前(执行clickHandler之前)执行我们所指定的匿名函数,在页面上弹出alert框。

三、v-model双向数据绑定

v-model实现双向数据绑定的意思是,我们可以在一些输入标签(text输入框、textarea、select、checkbox等)使用v-model,使其值与某个vue属性绑定。

当我们在输入框中输入字符时,vue对应的属性值也同步变化。这就是数据双向绑定。

1.手工实现简单的双向绑定

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <title>双向绑定</title>
</head>
<div id="app">
    <input type="text"  @input="changeHandler" :value="message">
    {{message}}
    <button @click="clickHandler">leo</button>
</div>
<script src="static/vue.js"></script>
<script>
    new Vue({
        el: "#app",
        data() {
            return {
                message: ""
        methods:{
            clickHandler(){
                this.message = "leo";
            changeHandler(e){
                this.message = e.target.value;
</script>
</body>
</html>

当我们修改text输入框的值时,触发oninput事件,changeHandler函数被执行,将输入框中的值赋值给message。

然后使用v-bind:value来绑定value和message的值,完成另一个方向的绑定。(这里使用v-bind,而不是真正的手工实现。真正的实现,应该要借助于侦听器,侦听message值的变化,并赋值给text标签的value)

2.v-model双向绑定简单例子

标签-->属性 的绑定方向:

简单例子:

< div id ="app" > < input type ="text" v-model ="message" > < p > {{message}} </ p > </ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { message: "" </ script > </ body >

我们给text输入框绑定了message属性,message的初始值是空字符串,实现效果:

3.v-model简单例子2

属性-->标签 的绑定方向:

当我们直接在某个事件函数中修改message属性的值,输入框中的值也会对应发生同步变化:

< div id ="app" > < input type ="text" v-model ="message" > < button @click ="changeValue" > 将message的值修改为"hello world" </ button > </ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { message: "" methods:{ changeValue(){ this .message = " hello world " ; </ script > </ body >

实现效果:

当我们点击"将message的值修改为'hello world'"按钮是,text中的值也改变了。

4.各种表单输入标签的双向绑定

主要是注意每种输入标签绑定的值的类型,例如bool、列表、字符串。

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <title>双向绑定</title>
</head>
<div id="app">
    <div> <!-- text输入框 -->
        <input type="text" v-model="message">
    </div>
    <div> <!-- textarea输入框 -->
        <textarea v-model="message" placeholder="add multiple lines"></textarea>
    </div>
    {{message}}
    <div> <!-- 单个复选框 -->
        <input type="checkbox" id="checkbox" v-model="checked">
        <label for="checkbox">{{ checked }}</label>
    </div>
    <div id='example-3'>  <!-- 多个复选框 -->
        <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
        <label for="jack">Jack</label>
        <input type="checkbox" id="john" value="John" v-model="checkedNames">
        <label for="john">John</label>
        <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
        <label for="mike">Mike</label>
        <span>Checked names: {{ checkedNames }}</span>
    </div>
    <div id="example-4"> <!-- 单选按钮 -->
        <input type="radio" id="one" value="One" v-model="picked">
        <label for="one">One</label>
        <input type="radio" id="two" value="Two" v-model="picked">
        <label for="two">Two</label>
        <span>Picked: {{ picked }}</span>
    </div>
    <div id="example-5"> <!-- select 单选 -->
        <select v-model="selected">
            <option disabled value="">请选择</option>
            <option>A</option>
            <option>B</option>
            <option>C</option>
        </select>
        <span>Selected: {{ selected }}</span>
    </div>
    <div id="example-6"> <!-- select多选 -->
        <select v-model="multiselected" multiple style="width: 50px;">
            <option>A</option>
            <option>B</option>
            <option>C</option>
        </select>
        <span>Selected: {{ multiselected }}</span>
    </div>
</div>
<script src="static/vue.js"></script>
<script>
    new Vue({
        el: "#app",
        data() {
            return {
                message: "",  // text和textarea文本输入框
                checked: false,  // 单个复选框
                checkedNames: [],  //多个复选框
                picked: '',  // 单选按钮
                selected: '',  // select,单选时
                multiselected: []  // select,多选时
        methods: {}
</script>
</body>
</html>

实现效果:

5.v-for实现动态选项

< div id ="app" > < select v-model ="selected" > < option v-for ="option in options" v-bind:value ="option.value" > {{ option.text }} </ option > </ select > < span > Selected: {{ selected }} </ span > </ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { selected: ' A ' , options:[ { text: ' One ' , value: ' A ' }, { text: ' Two ' , value: ' B ' }, { text: ' Three ' , value: ' C ' } </ script > </ body >

select标签中的option是使用v-for遍历options列表属性动态生成的。

6.v-model与v-bind配合实现动态值绑定

< div id ="app" > < input id ='rad1' type ="radio" v-model ="pick" v-bind:value ="a" > < label for ="rad1" > Leo </ label > < input id ='rad2' type ="radio" v-model ="pick" v-bind:value ="b" > < label for ="rad2" > Alex </ label > pick:{{pick}}
</ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { pick: '' , a: {name: ' leo ' }, b: {name: ' alex ' } </ script > </ body >

实现结果:

我们发现,v-model双向绑定的属性pick的值是来自value属性的,value属性由和a、b绑定,a、b可能是字符串、布尔值、或者对象等任意类型。

在5.中,也是这种用法,而且5.中使用的是循环获取动态值来产生动态选项。

四、v-model修饰符

1.lazy

lazy修饰符的作用是当我们进行了双向绑定后,在我们输入的使用,不对绑定的属性赋值,而是等我们输入完后使用回车,或光标切换到其他标签时,值才会赋予绑定的属性:

< div id ="app" > < input type ="text" v-model.lazy ="message" /> message:{{message}} < input type ="text" /> </ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { message: "" </ script > </ body >

实现效果:

2.number

number修饰符是让输入框中只有输入数字才有效(输入e3或e-3这种科学计数法可以)。

< div id ="app" > < input type ="text" v-model.number ="number" /> message:{{number}} < input type ="text" /> </ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { number: 0 </ script > </ body >

实现效果:

3.trim

trim修饰符是清除输入数据前面和后面的空格。

< div id ="app" > < input type ="text" v-model.trim ="trimedstring" /> trimedstring:{{trimedstring}} < input type ="text" /> </ div > < script src ="static/vue.js" ></ script > < script > new Vue({ el: " #app " , data() { return { trimedstring: '' </ script > </ body >

实现效果:

注意,字符串中间有空格的话,不管有多少个,都只保存一个空格。前面的空格会被直接去掉。

☜(ˆ▽ˆ)

保持学习,否则迟早要被淘汰*(^ 。 ^ )***