Vue 3 基础教程:快速掌握核心概念(四)

Vue.js 是一个渐进式 JavaScript 框架,以其轻量级和易用性著称,广泛应用于构建用户界面。本文将详细介绍 Vue 3 的基础语法和核心概念,帮助你快速上手 Vue 3 开发。

一、创建 Vue 实例

在开始使用 Vue 3 之前,首先需要创建一个 Vue 实例。Vue 实例是整个应用的入口点,负责管理应用的数据和行为。

示例

<div id="app" class="demo">
  {{ message }}
</div>

<script>
  const app = {
    data() {
      return {
        message: 'Hello Vue 3!'
      }
    }
  };

  const vueApp = Vue.createApp(app);
  vueApp.mount('#app');
</script>

解析

  • HTML 部分

    • <div id="app" class="demo">:这是一个普通的 <div> 元素,Vue 实例将管理这个元素及其内部的所有内容。
    • {{ message }}:这是 Vue 的模板语法,用于将 message 数据绑定到页面上。当 message 发生变化时,页面内容会自动更新。
  • JavaScript 部分

    • data() 方法返回一个对象,包含组件的初始数据。在这个例子中,message 的初始值是 'Hello Vue 3!'。
    • Vue.createApp(app) 创建一个新的 Vue 应用实例,参数是一个包含组件选项的对象。
    • vueApp.mount('#app') 将 Vue 应用实例挂载到页面中具有 id="app" 的 DOM 元素上。

执行过程

  1. 浏览器加载 HTML 和 JavaScript。
  2. Vue 脚本执行时,创建一个 Vue 应用实例,并将其绑定到 <div id="app"> 元素上。
  3. Vue 应用实例根据 data() 中的初始数据,将 message 的值渲染到页面上的 {{ message }} 处。
  4. 当 message 数据发生变化时,页面会自动更新以反映这些变化。

二、模板语法

Vue 3 的模板语法允许你在 HTML 中嵌入动态内容和逻辑。以下是几种常见的模板语法和指令。

插值

插值是最简单的模板语法,使用双大括号 {{ }} 来表示文本插值。


<div>
  {{ message }}
</div>

指令

指令是带有 v- 前缀的特殊属性,用于在模板中表达逻辑。

v-bind

v-bind 用于动态绑定一个或多个属性,或一个组件 prop。

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

简写形式:

<a :href="url">链接</a>

v-if / v-else-if / v-else

v-if 用于条件渲染,根据表达式的值来决定是否渲染元素。

<p v-if="visible">内容可见</p>
<p v-else>内容不可见</p>

v-for

v-for 用于列表渲染,根据数组或对象的属性值来循环渲染元素。


<ul>
  <li v-for="item in items" :key="item.id">{{ item.text }}</li>
</ul>

v-model

v-model 用于双向数据绑定,使表单元素的值与数据模型保持同步。

<input v-model="message" placeholder="编辑我">
<p>消息是:{{ message }}</p>

v-on

v-on 用于绑定事件监听器,使其能够在触发时执行方法。

<button v-on:click="doSomething">点击我</button>

简写形式:

<button @click="doSomething">点击我</button>

三、事件处理

Vue 3 提供了 v-on 指令来监听 DOM 事件,并在事件触发时执行方法。

示例

<div id="app">
  <button @click="greet">打招呼</button>
</div>

<script>
  const app = {
    methods: {
      greet() {
        alert('你好!');
      }
    }
  };

  const vueApp = Vue.createApp(app);
  vueApp.mount('#app');
</script>

解析

  • @click="greet":监听按钮的点击事件,当点击时调用 greet 方法。
  • greet 方法在 methods 对象中定义,当调用时会弹出一个警告框显示“你好!”。

四、计算属性

计算属性是基于其依赖进行缓存的属性,只有在其相关依赖发生变化时才会重新计算。

示例

<div id="app">

<p>{{ reversedMessage }}</p>
</div>

<script>
  const app = {
    data() {
      return {
        message: '你好'
      };
    },
    computed: {
      reversedMessage() {
        return this.message.split('').reverse().join('');
      }
    }
  };

  const vueApp = Vue.createApp(app);
  vueApp.mount('#app');
</script>

解析

  • reversedMessage 是一个计算属性,基于 message 计算出反转后的字符串。
  • 当 message 发生变化时,reversedMessage 会自动重新计算,页面内容也会相应更新。

五、组件

组件是 Vue 3 最强大的功能之一,允许你使用小型、独立和可复用的组件构建大型应用。

示例

<div id="app">
  <my-component></my-component>
</div>

<script>

  const app = Vue.createApp({});

  app.component('my-component', {
    template: '
<div>自定义组件!</div>'
  });

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

解析

  • app.component('my-component', {...}):注册一个名为 my-component 的全局组件。
  • <my-component></my-component>:在模板中使用该组件。

六、Props 和事件

Props

Props 用于在组件之间传递数据。

示例

<div id="app">
  <blog-post title="我的 Vue 之旅"></blog-post>
</div>

<script>
  const app = Vue.createApp({});

  app.component('blog-post', {
    props: ['title'],
    template: '
<h3>{{ title }}</h3>'
  });

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

解析

  • props: ['title']:定义组件接收的属性。
  • {{ title }}:在模板中使用传递的属性。

事件

子组件通过 $emit 触发事件,父组件可以监听这些事件。

示例

<div id="app">
  <button-counter @increment="incrementTotal"></button-counter>

<p>总点击次数:{{ total }}</p>
</div>

<script>
  const app = Vue.createApp({
    data() {
      return {
        total: 0
      };
    },
    methods: {
      incrementTotal() {
        this.total++;
      }
    }
  });

  app.component('button-counter', {
    template: '<button @click="increment">你点击了 {{ count }} 次。</button>',
    data() {
      return {
        count: 0
      };
    },
    methods: {
      increment() {
        this.count++;
        this.$emit('increment');
      }
    }
  });

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

解析

  • @increment="incrementTotal":父组件监听子组件触发的 increment 事件。
  • this.$emit('increment'):子组件通过 $emit 触发 increment 事件。

总结

通过本文,我们详细介绍了 Vue 3 的基础语法和核心概念,包括创建 Vue 实例、模板语法、事件处理、计算属性和组件等。希望这些内容能帮助你快速上手 Vue 3 开发,构建高效、响应式的用户界面。如果你有任何疑问或建议,欢迎在评论区留言交流。