Vue.js 学习之旅:方法与收获全记录

一、Vue.js 学习之法

Vue.js 官方文档:核心概念与用法详解

Vue.js 的官方文档是学习过程中不可或缺的宝藏,它涵盖了从基础到高级的所有知识内容。

首先,要深入理解 Vue.js 的响应式原理,它通过数据劫持结合发布 - 订阅模式,能够自动追踪数据的变化,并实时更新与之绑定的 DOM 元素。例如,当你在 Vue 实例中定义了一个 data 属性,像 data: { message: 'Hello Vue!' },只要 message 的值发生改变,所有绑定了 {{ message }} 的地方都会相应更新。

在模板语法方面,有插值表达式 {{ }} 用于展示数据,还有指令来实现各种交互逻辑。像 v-bind 指令可以绑定元素的属性,例如 ,能根据 imageUrl 变量的值来动态显示图片。而 v-on 指令用于绑定事件,像 ,点击按钮时就会触发 handleClick 方法。

组件化是 Vue.js 的核心特性之一,官方文档详细讲解了如何创建和使用组件。一个简单的 Vue 组件通常包含 template(模板)、script(逻辑代码)和 style(样式)三个部分。例如:



通过组件化,可以将复杂的页面拆分成一个个独立且可复用的小组件,大大提高了代码的可维护性和复用性。总之,仔细研读官方文档,是扎实掌握 Vue.js 的基础,为后续深入学习和实践打下坚实的根基。

Vue CLI:快速搭建项目的好帮手

Vue CLI 极大地简化了 Vue.js 项目的创建与开发流程。

第一步是安装 Vue CLI,前提是确保本地已经安装了 Node.js,然后使用 Node.js 的包管理器 npm 或 yarn 来进行全局安装,命令如下:

使用 npm:npm install -g @vue/cli

或者使用 yarn:yarn global add @vue/cli

安装完毕后,创建一个新的 Vue 项目就变得轻而易举了。通过命令 vue create my-project(这里 my-project 可以替换成你自己想要的项目名称),在创建过程中,Vue CLI 还会询问是否添加额外的功能,例如是否使用 Babel、ESLint 规则、构建工具等,你可以根据实际需求进行选择。创建完成后的项目会自动进入新创建的项目目录,比如 cd my-project 进入项目文件夹内。

在项目中,编写 Vue 组件也是很便捷的操作。一个基本的 Vue 组件结构如下:



此外,Vue CLI 提供了丰富的插件以扩展其功能,比如 @vue/cli-plugin-md-docs 可用于生成 API 文档,通过 vue add @vue/cli-plugin-md-docs 命令安装完成后,就能使用文档插件提供的命令进行文档管理,像生成、查看和编辑文档等操作。项目开发完成后,还可以使用构建命令 npm run build 来生成静态文件,然后将生成的 dist 目录下的文件部署到任何支持 HTTP 的服务器上,像利用 GitHub Pages 或 Netlify 等服务来部署静态网站。总之,Vue CLI 让整个 Vue.js 项目从创建到部署的流程都变得高效且流畅,是开发过程中的得力助手。

Vue.js Devtools:调试利器助开发

Vue.js Devtools 是一款专为 Vue.js 设计的调试工具,在开发过程中有着至关重要的作用。

它可以作为浏览器扩展来使用,例如在 Chrome 浏览器中,你可以访问 Chrome Web Store(https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd)来安装 Vue.js Devtools,Firefox 浏览器则可以通过 Firefox Add-ons(https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)进行安装。如果需要在其他浏览器或者移动设备上调试 Vue 应用,还可以通过 npm 来安装,先执行 npm install -g @vue/devtools,安装完成后再通过 vue-devtools 命令启动,然后在浏览器中访问 http://localhost:8098/ 即可。

使用时,在安装了 Vue.js Devtools 的浏览器中打开 Vue 应用,右键点击页面选择 “Inspect”,在弹出的开发者工具中找到 “Vue” 选项卡并点击,就能打开 Vue.js Devtools 了。在这里,可以查看组件树,组件树清晰地显示了所有组件的层级关系,便于我们更好地了解组件的结构。点击组件树中的任意组件,还能查看该组件的详细信息,比如 data(数据)、props(属性)、computed(计算属性)、methods(方法)等内容,并且可以直接在 devtools 中修改变量,实时查看页面发生的变化。

如果 Vue 应用使用了 Vuex 进行状态管理,Vue.js Devtools 会自动显示 Vuex 状态,能查看 state(状态)、getters(计算属性)、mutations(变更)和 actions(动作)及其详细信息。同时,它还提供了时间轴功能,借助时间轴,可以更好地了解应用的状态变化,知晓每个组件的状态变化以及它们之间的依赖关系。例如,在调试一个具有复杂交互和数据流转的应用时,通过时间轴就能清晰地看到是哪个操作引发了状态的改变,从而快速定位问题所在。总之,Vue.js Devtools 能显著提高调试效率,帮助开发者更顺畅地开发 Vue.js 应用。

Vue Router:构建单页面应用导航

Vue Router 作为 Vue.js 官方提供的路由管理器,对于构建单页面应用(SPA)的导航功能起着关键作用。

首先要进行安装,通过 npm 或 yarn 来安装 Vue Router,使用 npm 的命令是 npm install vue-router,用 yarn 则是 yarn add vue-router。安装完成后,需在 Vue 项目中进行配置才能使用。

在项目的入口文件(通常是 main.js)中,要导入 Vue 和 Vue Router,并使用 Vue.use(VueRouter) 来安装 Vue Router 插件,示例代码如下:

import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);

接着创建路由规则,一般可以在一个单独的文件(比如 router.js)中定义路由规则,像这样:

import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
const routes = [
  // 路由规则示例
  { path: '/', component: HomeComponent },
  { path: '/about', component: AboutComponent },
  { path: '/contact', component: ContactComponent }
];
const router = new VueRouter({ routes });
export default router;

这里的 path 属性表示路由路径,component 属性则代表当该路径被访问时要加载的组件。然后在根 Vue 实例中配置 router,同样在 main.js 文件里:

import Vue from 'vue';
import App from './App.vue';
import router from './router';
new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

在模板中,可以使用 组件来创建导航链接,例如:


当用户点击这些链接时,应用会根据路由配置切换到相应的页面。此外,还能在组件的方法中使用 this.$router.push() 方法进行编程式导航,比如:

methods: {
  goToAboutPage() {
    this.$router.push('/about');
  }
}

Vue Router 还支持很多强大的功能,像嵌套路由,可以在一个组件内部定义子路由,构建更复杂的页面结构;路由参数能够在路由路径中定义参数,实现动态地传递数据给组件;还有导航守卫,可在路由切换前后执行一些自定义逻辑,用于身份验证、权限控制等操作。总之,Vue Router 让单页面应用的页面切换和导航变得更加灵活、高效。

Vuex:集中管理应用状态

在 Vue 开发中,随着应用规模的扩大和复杂度的增加,状态管理变得尤为重要,而 Vuex 就是 Vue.js 官方推荐的状态管理库。

要使用 Vuex,首先需要进行安装,可以通过 npm 或者 yarn 来操作,命令分别为 npm install vuex 或者 yarn add vuex。安装完成后,一般在一个单独的文件(比如 store/index.js)中创建一个 Vuex store,示例代码如下:

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  }
});

在上述代码中,定义了一个简单的状态 count 和一个用于改变状态的 mutation(变更) increment。

然后在 Vue 应用的入口文件(通常是 main.js)中引入并使用这个 store,像这样:

import Vue from 'vue';
import App from './App.vue';
import store from './store';
new Vue({
  store,
  render: h => h(App)
}).$mount('#app');

如此一来,Vue 实例就绑定了 store,所有的组件都可以访问它了。

组件访问状态可以通过 props 或者 computed 属性来实现,例如:



要改变状态,必须通过提交 mutation 来完成,这样能确保状态的变化是可追踪的,并且能够被 Vue 的响应系统所捕捉,像在组件中定义一个方法来触发 mutation:

methods: {
  increment() {
    this.$store.commit('increment');
  }
}

此外,在实际应用中如果涉及异步操作(比如 API 请求),就需要使用 actions,示例如下:

actions: {
  asyncIncrement({ commit }) {
    setTimeout(() => {
      commit('increment');
    }, 1000);
  }
}

然后在组件中调用 action:

Vuex 还提供了 getters,类似于 Vue 中的 computed 属性,用于根据 state 计算衍生数据,比如:

getters: {
  doubleCount(state) {
    return state.count * 2;
  }
}

在组件中使用 getter:

{{ doubleCount }}

随着应用复杂度进一步提升,Vuex 支持模块化的状态管理,可以将状态分割成模块,每个模块有自己的 state、mutation、action 和 getter,使得大型应用的状态管理更加清晰和易于维护。总之,Vuex 为 Vue 应用的状态管理提供了一套完善且规范的解决方案,让应用在复杂的状态变化场景下依然能够稳定、可预测地运行。

Vue.js 组件:编写与复用的艺术

Vue.js 的组件化是其一大亮点,掌握组件的编写与复用技巧,能够极大地提升开发效率和代码质量。

编写一个 Vue 组件时,通常由三个部分组成,即 template(模板)、script(逻辑代码)和 style(样式)。例如下面这个简单的展示用户信息的组件:



在这个组件里,template 中通过插值表达式展示了 user 对象中的数据,script 里定义了组件的数据来源,style 则设置了组件的样式,并且通过 scoped 属性限定样式只作用于当前组件。

组件的复用性体现在可以在多个地方轻松调用同一个组件。比如在另一个页面组件中想要展示多个用户信息,就可以这样复用刚才定义的 user-info 组件:


这里通过导入组件并在 components 选项中注册,就可以像使用普通 HTML 标签一样多次使用该组件了。

而且,组件之间还可以进行通信,父组件可以通过 props 向子组件传递数据,例如父组件中有:


子组件则通过 props 接收数据:


同时,子组件也可以通过自定义事件向父组件传递消息,实现双向通信,充分展现了组件化开发的灵活性和便利性,让代码结构更加清晰,便于维护和扩展。

Vue.js 模板语法:构建动态页面的关键

Vue.js 的模板语法是构建动态页面的核心要素,它使得我们可以轻松地将数据和页面元素进行绑定,实现丰富的交互效果。

最常用的插值表达式 {{ }},能够将 Vue 实例中的数据展示在页面上。例如,在 Vue 实例里定义了 data 属性:

new Vue({
  el: '#app',
  data: {
    message: '欢迎来到 Vue.js 的世界'
  }
});

然后在模板中使用插值表达式:


这样页面上就会显示出相应的文字内容,并且当 message 的值发生变化时,页面也会自动更新。

除了插值表达式,指令也是模板语法中的重要部分。比如 v-bind 指令,用于绑定元素的属性,可以缩写为 :。像绑定图片的 src 属性:


通过改变 imageUrl 的值,就能动态切换图片。

v-on 指令用于绑定事件,缩写为 @,比如给按钮绑定点击事件:


点击按钮时就会触发对应的方法。

还有 v-if 和 v-show 指令用于控制元素的显示与隐藏,v-for 指令可以循环渲染列表数据,例如: