本文介绍了Vue的基本用法,包括数据绑定、内容渲染指令、属性绑定指令、JavaScript表达式、事件绑定指令、条件渲染指令、列表渲染指令以及v-for中的key的使用。同时,还涉及了v-model指令在表单元素上的双向数据绑定功能。

学习笔记

基本用法

<body>
    <div id = "app">
        {{message}}
    </div>
</body>
<script>
    Vue.createApp( {
        data: function() {
            return {
                message:"hello vue!",
            };
        },
    }).mount('#app');
</script>

内容渲染指令

  <body>
    <div id="app">
      <p>姓名:{{username}}</p>
      <p>性别:{{gender}}</p>
      <p>{{desc}}</p>
      <p v-html="desc"></p>
    </div>
  </body>
  <script>
    const app = {
      data() {
        return {
          username: "萧笃",
          gender: "男",
          desc: "<a href='http://www.baidu.com' >跳转百度</a>",
        };
      },
    };

    Vue.createApp(app).mount("#app");
  </script>

属性绑定指令

<body>
    <div id = "app">
        <a :href="link">百度</a>
        <input type="text" :placeholder = "inputvalue">
        <img :src="imgSrc" :style={width:w} alt="">

    </div>
</body>
<script>
    const vm = {
        data: function() {
            return {
                link: "http://www.baidu.com",
                inputvalue: "请输入内容",
                imgSrc: "./images/01.jpg",
                w: "500px"
            }
        }
    }

    const app = Vue.createApp(vm);
    app.mount("#app");
</script>
  • 属性前面加上':'

使用javascript表达式

<body>
    <div id = "app">
        <p> {{number+1}} </p>
        <p> {{ok?true:false}} </p>
        <p> {{message.split('').reverse().join('')}} </p>
        <p :id="'list-'+id" > xxx </p>
        <p> {{user.name}} </p>
    </div>
</body>
<script>
    const vm = {
        data() {
            return {
                number: 9,
                ok: false,
                message: 'ABC',
                id: 3,
                user: {
                    name: '萧笃',
                }
            }
        }
    }
    
    const app = Vue.createApp(vm);
    app.mount("#app");
</script>

事件绑定指令

  <body>
    <div id="app">
      <h3>count: {{count}}</h3>
      <button v-on:click="addcount">+1</button>
      <button @click="count+=1">+1</button>
    </div>
  </body>
  <script>
    const vm = {
      data: function () {
        return {
          count: 0,
        };
      },
      methods: {
        addcount() {
          this.count += 1;
        },
      },
    };
    const app = Vue.createApp(vm);
    app.mount("#app");
  </script>
  • v-on:click=""和@click=""属性一致,之前用on的属性全部改成@就可以了

条件渲染指令

<body>
    <div id = "app">
        <button @click = "flag = ! flag">转换flag</button>
        <p v-if = "flag">我是v-if</p>
        <p v-show = "flag">我是v-show</p>
    </div>    
</body>
<script>
    const vm = {
        data:function() {
            return {
                flag: false,
            }
        }
    }

    const app = Vue.createApp(vm);
    app.mount("#app");
</script>

v-show是创建了标签,但是通过css给隐藏了

<p style="display: none;">我是v-show</p>

v-if 则是通过条件来创建和删除,所以v-show的效率会更高一点

v-else和v-else-if指令

<body>
    <div id="app">
        <p v-if="num<0.5" > 随机数小于0.5</p>
        <p v-else="num>=0.5"> 随机数大于等于0.5 </p>
        <hr>
        <p v-if="type==='A'">优秀</p>
        <p v-else-if="type==='B'">良好</p>
        <p v-else-if="type==='C'">普通</p>
        <p v-else>差</p>
        <div v-show="a">
            测试
        </div>
        <button @click="a = !a">点击</button>
    </div>
</body>
<script>
    const vm = {
        data() {
            return {
                num: Math.random(),
                type: 'C',
                a:false
            }
        }
    }
    const app = Vue.createApp(vm);
    app.mount("#app");
</script>

列表渲染指令

  <body>
    <div id="app">
      <ul>
        <li v-for="(user,i) in userlist">索引是{{i}},姓名:{{user.name}}</li>
      </ul>
    </div>
  </body>
  <script>
    const vm = {
      data() {
        return {
          userlist: [
            {
              id: 1,
              name: "杜嘟",
            },
            {
              id: 2,
              name: "杜嘟嘟",
            },
            {
              id: 3,
              name: "杜嘟嘟嘟",
            },
          ],
        };
      },
    };
    const app = Vue.createApp(vm);
    app.mount("#app");
  </script>
  • v-for="(user,i) in userlist"这里边的i是自动生成的下标,从0开始,可以不要

v-for中的key

<body>
    <div id="app">
        <input type="text" v-model="name">
        <button v-on:click="addUser">添加</button>

        <ul>
            <li v-for = "(user,index) in userlist" :key="user.id">
                <input type="checkbox" :value="user.name"> {{user.name}}
            </li>
        </ul>
    </div>
</body>
<script>
    const vm = {
        data() {
            return {
                name: '',
                userlist: [
                    {
                        id:1,
                        name: '杜嘟'
                    },
                    {
                        id: 2,
                        name: '杜嘟嘟'
                    }
                ],
                nextid: 3
            }
        },
        methods: {
            addUser() {
                this.userlist.unshift({id: this.nextid,name: this.name}),
                this.nextid++;
                this.name='';
            }
        }
    }
    const app = Vue.createApp(vm);
    app.mount("#app");
</script>

在组件化开发中需要对每个li进行赋值一个key,否则如例子中每次添加一个新用户前选中的目标单选框,在新加入user之后,所选中的就会变成新加入的user。加入key则可以解决这个问题,这个key也不能使用for中自动生成的下标index,因为添加数据的时候下标也会改变,所以用user.id最合适。

<input type="text" v-model="name"> 
  • 属性v-model表示双向数据绑定,的核心指令。v-model 可以在表单元素(如 input、textarea 和 select)上创建双向数据绑定,自动更新数据。
最后修改:2025 年 11 月 07 日