1. 前言
由于上一章节中讲解了《Vue-脚手架》,所以我们想要完全的构建一个项目是需要很多依赖的。
依赖内容如下
2. Vuex
Vuex : 专门为 Vue.js 应用程序开发的状态管理库。
Vuex 主要解决了应用程序中 组件之间共享状态 和 管理状态 的问题。在大型 Vue 应用中,组件的状态可能会变得复杂,而 Vuex 提供了一种集中式管理状态的方式,使得状态的变化和管理更加可预测和可维护。
2.1. 第一步:安装 Vuex
- 由于我们的 Vue版本采用的是2.6.14为了兼容,我们安装3.5.1版本的Vuex
| 1
 | npm instal -g vuex@3.5.1 
 | 

2.2. 第二步:创建 Store
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | import Vue from 'vue'import Vuex from 'vuex'
 
 Vue.use(Vuex)
 
 export default new Vuex.Store({
 
 state: {
 },
 
 getter: {
 },
 
 mutations: {
 },
 
 actions: {
 
 },
 
 modules: {
 
 }
 })
 
 | 
2.3. 第三步:配置 Store
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | import Vue from 'vue'import App from './App.vue'
 import store from './store'
 
 Vue.config.productionTip = false
 
 new Vue({
 render: h => h(App),
 
 store
 }).$mount('#app')
 
 | 
2.4. 案例:计数器
Vuex :计数器应用程序,允许您增加计数并通过异步操作增加计数。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | import Vue from 'vue'import Vuex from 'vuex'
 
 Vue.use(Vuex)
 
 export default new Vuex.Store({
 // State(状态):应用程序中的所有状态被集中存储在一个状态树中。这个状态树可以看作是单一源 of truth(单一的数据源),供整个应用程序的组件访问。
 state: {
 +    count: 0
 },
 // Getter(获取器):Getters允许您从存储在状态树中的状态中派生出一些衍生状态,类似于计算属性。
 getter: {
 },
 // Mutation(变更):Mutations是用于修改状态的方法。它们是同步的操作,用于在应用程序中记录状态变化。
 mutations: {
 +    increment(state) {
 +      state.count++;
 +    }
 },
 // Action(动作): Actions是类似于Mutations的方法,但可以包含异步操作。
 actions: {
 +    incrementAsync({ commit }) {
 +      setTimeout(() => {
 +        commit('increment');
 +      }, 1000);
 +    }
 },
 // Module(模块): 当应用程序变得复杂时,Vuex允许您将状态和操作分割为模块。
 modules: {
 
 }
 })
 
 | 
- 创建页面 src/views/CounterView1.vue
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | <template><div>
 <p>Count: {{ count }}</p>
 <button @click="increment">Increment</button>
 <button @click="incrementAsync">Increment Async</button>
 </div>
 </template>
 
 <script>
 export default {
 computed: {
 count() {
 return this.$store.state.count;
 }
 },
 methods: {
 increment() {
 this.$store.commit('increment');
 },
 incrementAsync() {
 this.$store.dispatch('incrementAsync');
 }
 }
 };
 </script>
 
 | 
- 创建页面 src/views/CounterView2.vue
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | <template><div>
 <h3>我是组件2</h3>
 <p>Count: {{ count }}</p>
 </div>
 </template>
 
 <script>
 export default {
 computed: {
 count() {
 return this.$store.state.count;
 }
 }
 };
 </script>
 
 | 

3. Vue-Router
Vue Router :是一个为 Vue.js 应用程序提供路由功能的官方插件。它允许你在单页应用(Single Page Application,SPA)中管理不同视图之间的导航,实现页面之间的切换和状态管理,同时也支持路由参数、嵌套路由、路由导航守卫等功能。
3.1. 第一步:安装 Vue-Router
| 1
 | npm instal vue-router@3.5.1
 | 
3.2. 第二步:创建 Vue Router
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | import Vue from 'vue'import VueRouter from 'vue-router'
 import HomeView from '../views/HomeView.vue'
 
 Vue.use(VueRouter)
 
 const routes = [
 {
 path: '/',
 name: 'home',
 props: route => route.query,
 component: HomeView
 },
 {
 path: '/about',
 name: 'about',
 props: route => route.query,
 component: () => import('../views/AboutView.vue')
 }
 ]
 
 const router = new VueRouter({
 routes
 })
 
 export default router
 
 | 
3.3. 第三步:配置 Vue Router
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | import Vue from 'vue'import App from './App.vue'
 import router from './router'
 import store from './store'
 
 Vue.config.productionTip = false
 
 new Vue({
 render: h => h(App),
 router,
 store
 }).$mount('#app')
 
 
 | 
3.4. 第四步:使用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | <template><div id="app">
 <nav>
 <!-- <router-link to="/">Home</router-link> |
 <router-link to="/about">About</router-link> |  -->
 <router-link to="/counter1">Counter1</router-link> |
 <router-link to="/counter2">Counter2</router-link>
 </nav>
 <router-view/>
 </div>
 </template>
 
 <style lang="stylus">
 #app
 font-family Avenir, Helvetica, Arial, sans-serif
 -webkit-font-smoothing antialiased
 -moz-osx-font-smoothing grayscale
 text-align center
 color #2c3e50
 margin-top 60px
 </style>
 
 | 

4. Axios
Axios :是一个基于 Promise 的 JavaScript HTTP 客户端,用于浏览器和 Node.js。它支持在浏览器中发起 HTTP 请求,并且提供了丰富的功能,如请求和响应的拦截、请求取消、并发请求等。
4.1. 第一步:安装 Axios
| 1
 | npm install axios@0.19.1
 | 
| 12
 3
 4
 5
 6
 7
 
 | "dependencies": {"axios": "^0.19.1",
 "core-js": "^3.8.3",
 "vue": "^2.6.14",
 "vue-router": "^3.5.1",
 "vuex": "^3.5.1"
 }
 
 | 
4.2. 案例:获取用户信息
| 12
 3
 4
 5
 6
 
 | {path: '/userList',
 name: 'userList',
 props: route => route.query,
 component: () => import('../views/UserView.vue')
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 | <template><div>
 <h1>User List</h1>
 <ul>
 <li v-for="user in users" :key="user.id">{{ user.name }}</li>
 </ul>
 </div>
 </template>
 
 <script>
 import axios from 'axios';
 
 export default {
 data() {
 return {
 users: []
 };
 },
 mounted() {
 this.fetchUsers();
 },
 methods: {
 fetchUsers() {
 axios.get('https://jsonplaceholder.typicode.com/users')
 .then(response => {
 this.users = response.data;
 })
 .catch(error => {
 console.error(error);
 });
 }
 }
 };
 </script>
 
 | 
