Vue.js 基础教程:从入门到实践

一、Vue.js 简介

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。与其他大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。

二、环境搭建

1. 使用ES模块构建版本

这是最简单的方式,适合初学者快速体验 Vue 的功能。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue 入门案例</title>
</head>
<body>
    <div id="app">
        {{ message }}
    </div>

<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

    const app = createApp({
        data() {
            return {
                message: 'Hello Vue!'
            }
        }
    });

    app.mount('#app');
</script>
</body>
</html>

2. 通过 NPM 安装(适合大型项目)

bash 复制代码
npm install vue

三、Vue 常用指令详解与案例

Vue 提供了丰富的指令,用于在模板中绑定数据、事件、属性等。以下是常用的指令及其使用案例。

1. v-bind:绑定属性

用于绑定 HTML 属性到 Vue 实例的属性或表达式上。简写为 :。

案例:绑定图片地址

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue 入门案例</title>
</head>
<body>
    <div id="app">
      <img :src="imageUrl" alt="Vue Logo">
    </div>

<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

    const app = createApp({
        data() {
          return {
            imageUrl: 'https://vuejs.org/images/logo.png'
          };
        }
    });

    app.mount('#app');
</script>
</body>
</html>

2. v-model:双向数据绑定

用于在表单元素上创建双向数据绑定。

案例:输入框双向绑定

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue 入门案例</title>
</head>
<body>
    <div id="app">
      <input type="text" v-model="message">
      <p>你输入的内容是: {{ message }}</p>

    </div>

<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

    const app = createApp({
        data() {
          return {
            message:''
          };
        }
    });

    app.mount('#app');
</script>
</body>
</html>

3. v-if / v-else-if / v-else:条件渲染

根据表达式的真假条件性地渲染元素。

案例:条件显示内容

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue 入门案例</title>
</head>
<body>
    <div id="app">
      <p v-if="score>=90">
        优秀
      </p>
      <p v-else-if="score>=75">
        良好
      </p>
      <p v-else-if="score>=60">
        及格
      </p>
      <p v-else>
        不及格
      </p>

    </div>

<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

    const app = createApp({
        data() {
          return {
            score:85
          };
        }
    });

    app.mount('#app');
</script>
</body>
</html>

4. v-for:列表渲染

用于基于数组渲染列表。

案例:遍历数组

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue 入门案例</title>
</head>
<body>
    <div id="app">
      <ul >
        <li v-for="item in list" :key="item.id">
          {{ item.id }} - {{ item.name }} - {{ item.age }}

        </li>
      </ul>
    </div>

<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

    const app = createApp({
        data() {
          return {
            list: [
              { id: 1, name: '张三', age: 18 },
              { id: 2, name: '李四', age: 28 },
              { id: 3, name: '王五', age: 38 }
            ]
          };
        }
    });

    app.mount('#app');
</script>
</body>
</html>

5. v-on:事件监听

用于监听 DOM 事件,简写为 @。

案例:点击按钮增加计数

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-on 示例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <p>当前计数:{{ count }}</p>
        <button v-on:click="count++">增加</button>
        <!-- 简写形式 -->
        <button @click="count--">减少</button>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                count: 0
            }
        });
    </script>
</body>
</html>

6. v-show:根据条件显示或隐藏元素

与 v-if 不同,v-show 通过 CSS 的 display 属性控制元素的显示和隐藏。

案例:切换元素显示

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-show 示例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <p v-show="isVisible">这个段落是可见的</p>
        <button @click="isVisible = !isVisible">切换显示</button>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                isVisible: true
            }
        });
    </script>
</body>
</html>

四、综合案例:待办事项列表

结合以上指令,我们创建一个简单的待办事项列表应用。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue 待办事项列表</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            padding: 20px;
        }
        ul {
            list-style-type: none;
            padding: 0;
        }
        li {
            margin: 5px 0;
        }
        .completed {
            text-decoration: line-through;
            color: gray;
        }
    </style>
</head>
<body>
    <div id="app">
        <h1>待办事项列表</h1>
        <input v-model="newTodo" @keyup.enter="addTodo" placeholder="添加新任务">
        <button @click="addTodo">添加</button>
        <ul>
            <li v-for="todo in todos" :key="todo.id">
                <input type="checkbox" v-model="todo.completed">
                <span :class="{ completed: todo.completed }">{{ todo.text }}</span>
                <button @click="removeTodo(todo.id)">删除</button>
            </li>
        </ul>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                newTodo: '',
                todos: []
            },
            methods: {
                addTodo() {
                    if (this.newTodo.trim() === '') return;
                    this.todos.push({
                        id: Date.now(),
                        text: this.newTodo,
                        completed: false
                    });
                    this.newTodo = '';
                },
                removeTodo(id) {
                    this.todos = this.todos.filter(todo => todo.id !== id);
                }
            }
        });
    </script>
</body>
</html>

五、总结

通过本教程,我们学习了:

  • Vue.js 的基本概念和环境搭建
  • 常用指令(v-bind、v-model、v-if、v-for、v-on、v-show)的使用
  • 通过一个综合案例,将所学知识应用到实际开发中

Vue.js 的学习曲线平缓,但功能强大。掌握这些基础知识后,你可以进一步探索 Vue 的组件化开发、路由管理(Vue Router)、状态管理(Vuex)等高级特性,构建更加复杂和高效的应用。

相关推荐
Dream-Y.ocean1 小时前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
Csvn2 小时前
性能监控
前端
Highcharts.js2 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
Csvn3 小时前
构建工具
前端
FRing033 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Java小卷4 小时前
JuanForm vs FormCreate!Vue3 表单引擎联动配置 PK!
vue.js·低代码
kyriewen5 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒6 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫6 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus6 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude