青训营前端 | 青训营

76 阅读10分钟

青训营上课笔记

五.VUE

Vue是一个用于构建用户界面的渐进式框架。它采用了MVVM(Model-View-ViewModel)的架构模式,能够将数据和视图进行双向绑定,在数据发生变化时自动更新视图。

1.特点

a.渐进式

VUE是一个渐进式框架,可以根据项目需求逐步引入使用它可以仅用于处理UI层,也可以用于构建整个SPA(Single Page Application)应用

b.声明式渲染

Vue使用简洁的模板语法,将DOM和数据进行绑定,通过声明式的方式实现数据的动态渲染。

c.组件化开发

Vue将一个页面拆分成多个可复用的组件,每个组件都有独立的逻辑和视图。组件化开发使得项目结构清晰,代码可维护性更高。

d.数据驱动

Vue采用响应式的数据绑定机制,当数据发生变化时,自动更新对应的视图。这种数据驱动的方式简化了开发流程,使得开发者可以更专注于业务逻辑的实现。

e.虚拟DOM(Virtual DOM)

Vue使用虚拟DOM来管理页面变化。当数据发生变化时,Vue会在内存中构建一个新的虚拟DOM树,然后与之前的虚拟DOM树进行比较,找出变化的部分进行实际DOM操作。这样可以减少实际DOM操作的次数,提高页面渲染的性能。

f.插件系统

Vue拥有强大的插件系统,可以方便地扩展其核心功能。开发者可以编写自己的插件,或使用已有的插件来满足项目需求。

g.生命周期钩子

Vue提供了一系列的生命周期钩子函数,可以让开发者在不同的阶段插入自定义的逻辑。从实例化、挂载、更新到销毁,都有相应的钩子可以使用。

h.指令系统

Vue提供了一套强大的指令系统,可以通过指令来操作DOM、绑定事件、添加样式等。常用的指令有v-if、v-for、v-bind、v-on等。

i.计算属性和侦听器

Vue提供了计算属性和侦听器的功能,可以方便地对数据进行处理和监听。计算属性可以根据依赖的数据动态计算出一个新的值,而侦听器可以在数据发生变化时执行相应的操作。

j.路由管理

Vue-Router是Vue的官方路由管理库,可以实现SPA的前端路由功能。它可以通过配置路由表,将不同的URL映射到对应的组件上,实现页面的切换和导航。

k.状态管理

Vue提供了Vuex作为官方的状态管理库,用于管理应用程序中的共享状态。Vuex将应用程序的状态集中存储在一个单一的地方,并提供了一组API来进行状态的修改和访问。

l.异步组件

Vue可以轻松实现异步组件的加载,可以延迟加载某部分组件,以减少初始加载时间,提高应用的性能。

m.单文件组件

Vue允许将组件的HTML模板、JavaScript代码和CSS样式都写在一个单独的文件中,提高了组件的可读性和维护性。同时,Vue支持预编译单文件组件,可以通过构建工具将其转换为浏览器可识别的代码。

n.测试性

Vue提供了丰富的测试工具和API,可以方便地进行单元测试、集成测试和端到端测试,保证应用程序的稳定性和质量。

o.响应式系统

Vue使用了响应式系统来实现数据的双向绑定。当数据发生变化时,视图会自动更新,而当视图发生交互操作时,数据也会相应地更新。这大大简化了开发过程,提高了开发效率。

p.跨平台开发

Vue可以用于开发Web应用程序,也可以用于开发移动应用程序。通过使用Vue的移动端框架Vue Native或第三方的桥接工具,开发者可以使用Vue的语法和特性开发原生移动应用。

q.插件化架构

Vue具有插件化的架构,可以通过插件的方式扩展Vue的功能。Vue的官方插件库以及第三方插件库提供了各种丰富的功能模块,如数据表格、图表、地图等,可以满足各种项目的需求。

2.开发流程

a.环境搭建

首先,需要在本地搭建好开发环境。这包括安装Node.js和npm(Node包管理器),然后使用npm安装Vue的脚手架工具Vue CLI

b.创建项目

通过Vue CLI创建一个新的Vue项目。可以使用命令行运行`vue create project-name`,根据提示选择需要的特性和配置,然后等待项目初始化完成。

c.编写组件

在项目的src目录下,找到App.vue文件,这是一个默认的根组件。你可以在这个文件中编写你的页面组件,或者根据需要创建新的组件。Vue的组件是独立的,可以有自己的template、script和style。

d.路由配置

根据项目需求,Vue提供了Vue Router来管理页面的路由。你可以在src目录下创建一个router文件夹,然后在里面创建一个index.js文件,用来配置路由。

e.数据管理

如果需要对数据进行状态管理,可以使用Vue的官方状态管理库Vuex。在src目录下创建一个store文件夹,然后在里面创建一个index.js文件,用来配置Vuex的store。

f.运行项目

在命令行中使用`npm run serve`命令来运行项目。会自动启动一个开发服务器,然后在浏览器中打开对应的地址就可以预览项目了。在开发过程中,会实时更新页面。

g.发布部署

当开发完成后,使用`npm run build`命令来构建项目。这会在项目根目录下生成一个dist文件夹,里面包含了用于生产环境的压缩和优化过的代码和资源文件。将这些文件部署到服务器上,就可以在生产环境中使用了。

h.测试和维护

进行必要的测试,包括单元测试和集成测试,确保项目的稳定性和质量。在项目的生命周期中,继续进行维护和功能的迭代开发。

3.实例

a.代码

APP.vue

<template>
    <div>
        <h1>{{ greeting }}</h1>
        <input type="text" v-model="name" placeholder="Enter your name" />
        <button @click="sayHello">Say Hello</button>
        <router-link to="/about">About</router-link>
    </div>
</template>

<script>
export default {
    data() {
        return {
            name: '',
            greeting: ''
        }
    },
    methods: {
        sayHello() {
            if (this.name !== '') {
                this.greeting = 'Hello, ' + this.name + '!'
            } else {
                this.greeting = 'Please enter your name.'
            }
        }
    }
}
</script>

About.vue

<template>
    <div>
        <h2>About Page</h2>
        <p>This is the about page content.</p>
        <router-link to="/">Back to Home</router-link>
    </div>
</template>

main.js

import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';

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

router.js

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';

Vue.use(VueRouter);

const routes = [
    { path: '/', component: Home },
    { path: '/about', component: About },
];

const router = new VueRouter({
    routes,
});

export default router;

store.js

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        count: 0,
    },
    mutations: {
        increment(state) {
            state.count++;
        },
    },
    actions: {
        increment(context) {
            context.commit('increment');
        },
    },
});

b.业务实现流程

1. 首页(Home)界面显示了一个问候语,并提供了一个输入框和按钮。用户可以在输入框中输入自己的姓名,并点击按钮触发事件。

2. 当用户点击按钮时,触发 `sayHello` 方法。该方法首先检查输入框中是否有内容,如果有内容,则将问候语更新为 "Hello, [name]!",其中 [name] 是用户输入的姓名;如果输入框为空,则提示用户 "Please enter your name."。

3. 通过 `v-model` 指令,将输入框的值绑定到 `name` 数据属性上,实现双向数据绑定。这意味着用户输入的值会自动更新到 `name` 属性,并且在输入框中显示。

4. 通过模板插值 `{{ greeting }}`,将 `greeting` 数据属性的值显示为页面上的问候语。

5. 在导入的路由配置文件中,定义了两个路由:首页和关于页面的路由。

6. 首页的路由路径为 `/`,对应着 `Home` 组件,用户通过访问网站根路径或点击页面上的链接可进入该页面。

7. 关于页面的路由路径为 `/about`,对应着 `About` 组件,用户通过点击首页上的链接可进入该页面。

8. 在关于页面中,显示了一些简单的内容,并提供一个链接返回到首页。
可以将整个流程总结如下:

1. 用户访问网站的根路径,进入首页(Home)页面。
2. 用户可以在输入框中输入姓名,并点击按钮。
3. 如果输入框不为空,页面会显示相应的问候语;如果输入框为空,页面会显示提示消息。
4. 用户可以点击链接跳转到关于页面(About)。
5. 在关于页面中,显示一些简单的内容,并提供一个链接返回到首页。

c.文件说明

1)App.vue:主组件文件,包含了项目的根组件。

1.模板中定义了项目的主体结构,通过双大括号语法 {{}} 绑定了 greeting 变量的值。

2.组件中定义了 data 属性,包含了 name 和 greeting 变量的初始值。

3.changeName 方法用于修改 name 变量的值。

4.changeMessage 方法用于修改 greeting 变量的值。

2)main.js:项目的主入口文件,用于创建 Vue 实例并挂载到 DOM 上。

1.引入了 Vue、App 组件、和 router、store。

2.创建 Vue 实例并配置路由和状态管理。

3.将 App 组件渲染到 `#app` DOM 元素上。

3)router.js:路由配置文件。

1.引入 Vue、VueRouter,以及要使用的组件。

2.定义路由规则,包括根路径 `/` 和关于页面的路径 `/about`3.创建 VueRouter 实例,并将路由规则配置到实例中。

4.将路由实例导出,以供 main.js 使用。

4)store.js:状态管理文件。

1.引入 Vue 和 Vuex,以及需要使用的数据和方法。

2.创建 Vuex 的 Store 实例,用于管理应用程序的状态。

3.定义应用程序的 `state``mutations``actions`4.将 Store 实例导出,以供 main.js 使用。

5.About.vue

About.vue 的作用是显示关于页面的内容。它是一个单独的页面组件,当用户导航到 "/about" 路由路径时,将会渲染 About.vue 组件。

在 About.vue 组件中,你可以编写任何你想显示的关于页面的内容,例如公司介绍、联系信息、项目说明等。示例中的 About.vue 简单地显示了一个标题和一段文字内容,并提供了一个链接返回到主页。

d.运行

1)终端

npm init
npm install
npm run serve

2)init

运行 `npm init` 命令后,被提示输入一些信息来配置新的 `package.json` 文件。

1. `name`(名称):项目的名称。默认为当前目录的名称。
2. `version`(版本):项目的版本号。默认为 `1.0.0`3. `description`(描述):项目的简短描述。
4. `entry point`(入口点):项目的主要入口文件。默认为 `index.js`5. `test command`(测试命令):可以在这里输入运行测试的命令。
6. `git repository`(Git 仓库):项目的 Git 仓库地址。
7. `keywords`(关键字):项目的关键字,用英文逗号分隔。
8. `author`(作者):姓名或者组织名称。
9. `license`(许可证):项目的许可证类型。默认为 `ISC`10. `Yes/No`(是/否):再次确认输入的信息。

在完成输入所有信息后,npm 将生成一个新的 `package.json` 文件,并将提供的信息写入其中。