因为工作原因,笔者先后使用过 SAP UI5 和 Angular 进行过企业级前端界面的开发工作。所谓企业级前端应用,是指为大型企业或组织开发的前端应用,这些应用具有超过一般 2C 软件的技术复杂度,高度定制化和可扩展性,因为企业级前端应用程序,通常需要满足企业特定的业务需求和技术要求,因此除了实现业务需求之外,还必须具备强大的性能、可扩展性、安全性和可维护性。
像笔者所在的公司,发布的 SAP S/4HANA,就是一个典型的企业级应用,其前端页面是 Fiori Elements 框架基于 CDS View 注解自动生成。
而 Vue 则是另一款国内非常流行的单页面应用开发框架。所谓 Vue 全家桶,意思是借助全家桶提供的工具和特性,开发人员能完成一个典型的前端单页面应用的开发工作,实现通用的需求。
目前业界对于 Vue 全家桶应该具备的组件,达成一致的看法是,Vue 全家桶至少应该包含下列这些组件:
- 项目构建工具
- 页面路由管理器
- 状态管理
本文余下部分一一道来。
项目构建工具
也就是所谓的 CLI - Command Line Interface,像笔者之前使用的 SAP UI5 和 Angular,CLI 工具分别是 SAP UI5 Tooling 和 Angular CLI.
使用 npm 安装 Vue CLI:
npm install -g @vue/cli
安装完毕之后,就可以使用 Vue CLI,开始我们的 Vue 探索之旅了。
使用命令行创建一个新的 Vue 应用:
vue create my-project
选择 Vue 3:
然后在向导里,选择 npm 作为包管理器:
然后就是自动用 npm 安装依赖:
安装完毕后,我们收到如下提示消息:
进入 my-project 文件夹,执行 npm run serve,就能启动本地 vue 应用了:
浏览器地址栏输入 localhost:8080, 看到下面的界面,说明 Vue CLI 以及第一个 Vue 应用,已经创建成功了:
上面这个页面的完整源代码,在 HelloWorld.vue
里:
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
页面路由管理器
vue-router
是 Vue.js 的官方路由管理器,它允许我们在单页应用(SPA)中通过简单的配置定义路由和页面之间的映射关系。通过使用 vue-router
,可以实现在不同 URL 下加载不同的组件,从而实现页面间的无缝切换,并且可以利用其提供的导航守卫、路由参数、动态路由等功能来实现更丰富的页面控制和交互。
我们通过一个实际的例子来学习 vue-router
的使用方法。
router-link
是 Vue Router 提供的一个组件,用于在 Vue 应用中实现页面之间的导航。它可以被用来创建类似于 <a>
标签的可点击链接,但是它在点击时会通过 Vue Router 进行路由的跳转,而不会像普通的超链接一样触发浏览器的页面刷新。
router-link
的使用场合非常广泛,特别是在需要实现单页应用(SPA)的情况下。在 SPA 中,页面的导航通常是通过改变 URL 路径来实现的,而不是通过传统的页面刷新。router-link
提供了一种方便的方式来定义用户在应用中的导航行为,同时还可以通过 Vue Router 的各种功能来实现路由的管理和控制。
下面是一个简单的例子,展示了如何在 Vue 应用中使用 router-link
:
<template>
<div>
<router-link to="/home">Home</router-link>
<router-link to="/about">About</router-link>
<router-link :to="{ path: '/user', query: { id: 123 }}">User</router-link>
</div>
</template>
<script>
export default {
name: 'App',
}
</script>
在上面的例子中,我们在模板中使用了三个 router-link
组件,分别用来导航到不同的路径。每个 router-link
的 to
属性指定了它所要导航到的路径。这个路径可以是一个字符串,也可以是一个包含路径信息的对象。在第三个 router-link
中,我们使用了对象形式的路径,并且传递了一个查询参数 id: 123
。
当用户点击了任意一个 router-link
,Vue Router 会根据指定的路径进行路由的跳转,而不会触发整个页面的重新加载。这样就可以实现在单页应用中的页面导航,同时保持应用的流畅性和响应速度。
除了简单的跳转功能之外,router-link
还提供了一些额外的特性,例如可以通过 tag
属性指定渲染的标签类型(默认是 <a>
),也可以通过 active-class
属性指定当前路由匹配时的样式类名等。这些特性使得 router-link
更加灵活和实用。
https://zhuanlan.zhihu.com/p/165511376
vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,用过 Angular 的开发朋友们,可以把它类比成 Angular 应用里的 NgRx,它允许 Vue 开发人员在应用程序中的所有组件之间共享和管理状态,并提供了一种集中式的状态管理方案。通过 vuex
,我们可以在整个应用程序中轻松地管理共享状态,使得状态的变化和管理变得更加可预测和可控。
作用和使用场合
vuex
主要用于管理应用程序中的状态,这些状态可以包括用户信息、用户权限、页面状态、主题设置等等。它的主要作用可以总结为以下几点:
- 集中式状态管理:通过
vuex
,您可以将应用程序中的所有共享状态集中存储到一个单一的状态树中。这使得状态的管理变得更加清晰和可控,方便进行状态的统一管理和调试。 - 状态的响应式更新:
vuex
使用 Vue.js 的响应式系统来跟踪所有状态的变化。当状态发生变化时,相关组件会自动重新渲染,从而保持视图与状态的同步。 - 状态的可预测性:
vuex
的状态改变只能通过提交 mutation 来进行,而且 mutation 必须是同步函数。这种限制确保了状态变更的可追踪性和可预测性,使得状态的变化变得更加可控和可维护。 - 方便的插件扩展:
vuex
提供了一些方便的插件机制,可以用来实现诸如持久化存储、调试工具等功能的扩展,从而进一步提升开发效率和便利性。
vuex
适用于以下场合:
- 当应用程序的状态变得复杂并且需要在多个组件之间共享时,使用
vuex
可以更好地组织和管理这些状态。 - 当我们需要对状态的变化进行严格的控制和约束时,
vuex
提供的 mutation 和 action 的机制可以确保状态的变化符合一定的规范和流程。 - 当我们需要实现一些跨组件的状态共享和通信时,
vuex
可以更轻松地实现这些功能。
我们海狮通过一个实际例子来介绍 Vuex 的使用方法。
假设我们有一个简单的购物车应用,其中包含商品列表、购物车状态等。我们可以使用 vuex
来管理购物车的状态。
首先,我们需要定义一个包含购物车状态的状态树:
const store = new Vuex.Store({
state: {
products: [],
cart: []
},
mutations: {
addToCart(state, productId) {
const product = state.products.find(p => p.id === productId);
if (product) {
state.cart.push(product);
}
},
removeFromCart(state, productId) {
state.cart = state.cart.filter(p => p.id !== productId);
}
},
actions: {
addToCart(context, productId) {
// 在这里可以进行一些异步操作,如发送网络请求等
context.commit('addToCart', productId);
},
removeFromCart(context, productId) {
// 在这里可以进行一些异步操作,如发送网络请求等
context.commit('removeFromCart', productId);
}
}
});
然后,在需要使用购物车状态的组件中,可以通过 mapState
、mapMutations
和 mapActions
等辅助函数来方便地使用 vuex
中的状态和操作:
import { mapState, mapMutations, mapActions } from 'vuex';
export default {
computed: {
...mapState(['cart'])
},
methods: {
...mapMutations(['addToCart']),
...mapActions(['removeFromCart']),
handleAddToCart(productId) {
this.addToCart(productId);
},
handleRemoveFromCart(productId) {
this.removeFromCart(productId);
}
}
}
通过以上示例,我们可以看到 vuex
的使用方式以及它在管理状态和实现状态共享方面的便利性和灵活性。
更多关于 vuex 的介绍,大家可以参考其官网。
以上就是 Vue 全家桶之 Vue CLI,Vue router 和 Vuex 三大组件的详细介绍。当然 Vue 的世界博大精深,掌握这三大组件的用法,只能说初窥门径。祝大家学习愉快。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。