Vue(二)进阶

简介: Vue(二)进阶

Vue脚手架:

vue-cli:

全局安装:

npm install  -g  vue-cli

查看版本:

vue -V 

初始化脚手架:

vue init webpack + 项目的名字

运行项目:

npm run dev

打包项目:

npm run build

文件及文件夹的信息:

1.webp.jpg1.webp.jpg

开发依赖:  开发编译打包需要的依赖,打包之后就不要了 
生产依赖:  打包前后都需要的依赖


在router文件夹下新建js文件:

import VueRouter from 'vue-router'//引入路由模块
       import Vue from 'vue'
       Vue.use(VueRouter)//依赖模块
       let router=new VueRouter({
        routes:[
      {path:'路径(加斜杠访问)',name:"名字(直接访问)",component:'注册组件(跳转的位置)',chidern:[]子路由}
      {path:'/',redirect:"/home"},//路由的重定向 如果hash 为'/' 指向到 /home
        ]
       })
       export default router

通过标签来切换组件


通过标签显示


keep-alive:在component组件、router-view外面包裹上keep-alive的话,就会对组件进行缓存,当切换回来的时候,组件会立即渲染,理论来说,切换组件的时候其实会把上一个组件销毁,使用了keep-alive则不会(就是组件一直存在于缓存中)


include匹配到的组件会被缓存,exclude匹配到的不会被缓存


值可以为逗号隔开的字符串include = ‘a,b’;正则:include = ‘/a|b/’;数组:include=[‘a’,’b’]


多级路由:

const routes = [
  {path:'/main',component:AppMain},
  {path:'/news',component:AppNews,children:[//children是子目录
    {path:'inside',component:AppNewsInside},
    {path:'outside',component:AppNewsOutside}
  ]},
]

默认路由:

{path:'',component:Main}//将默认路径设置成Main

动态路由:

{path:'/user/:id',component:User}//id为传的值

命名路由:


直接用name : main在hash中写name就可以路由


路由跳转:

router.push = router-link:to router.replace = router-link:to.replace router.go() = window.history.go

路由钩子:


全局路由钩子:

router.beforeEach((to, from, next) => {
    //会在任意路由跳转前执行,next一定要记着执行,不然路由不能跳转了
  console.log('beforeEach')
  console.log(to,from)
  //
  next()
})
//
router.afterEach((to, from) => {
    //会在任意路由跳转后执行
  console.log('afterEach')
})

局部路由:

 routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]

组件内的路由钩子:

beforeRouteEnter (to, from, next) //confirm 前调用
beforeRouteUpdate (to, from, next) //在当前路由改变调用
beforeRouteLeave (to, from, next)//导航离开该组件的对应路由时调用

生命周期:

2.png


beforeCreate:

创建组件之前,没有组件,没有元素,没有事件,没有生命周期


created:

创建组件结束,有数据,没有元素


beforeMount:

挂载之前,有数据,没有元素


mounted:

挂载完成,有元素,有数据


beforeUpdate:(在mounted后执行)

用于监听数据变化


updated:

用于监听数据变化


beforeDestroy:

销毁实例,元素数据还在


destroyed:

销毁实例


Vue中的ajax:

axios:

载入:npm install axios


在main.js中

import Axios from 'axios';//引入
Vue.prototype.$axios = Axios;//将Axios附着在Vue,以供全局调用
Axios.defaults.baseURL = 'http://localhost:1024';//设置默认接口地址

然后在需要请求的组件中:

this.$axios
        .post("hash",data)//hash是接口地址,不需要加主机地址(http://localhost/index直接写/index)data是传输的对象
        .then(res => {//返回值
          if (res.data.err == 0) {
           console.log(res)
          }
        })
        .catch(err => {
          console.log(err);
        });

axios拦截器:

请求拦截:

axios.interceptors.request.use(function (config) {//发送之前进行过滤
    return config;
  }, function (error) {
    return Promise.reject(error);
  });

响应拦截:

axios.interceptors.response.use(function (response) {//请求到数据后进行过滤
    return response;
  }, function (error) {
    return Promise.reject(error);
  });

Vuex:

作用:多个组件共享状态及数据


安装:npm install vuex


配置:在src中新建store文件夹:在里面新建js文件

import Vue from 'vue'
import Vuex from 'vuex'//引入Vuex
Vue.use(Vuex);
import login from './login/index'
const store = new Vuex.Store({
  modules: {
    login: login,
  }
})
export default store;//抛出vuex实例

在src中新建的store文件夹中新建另一个文件夹:里面有5个js文件


1.webp.jpg


大致示范一下里面的内容(部分购物车内容,大概看一下就好):


index.js

import state from './state';
import mutations from './mutations';
import getters from './getters';
import actions from './actions';
let store = {
  state,
  mutations,
  getters,
  actions
};
export default store;

state.js

export default {
  carObj: [],
}

getters.js

export default {
  // 派生属性
  all(state) {
    var price = 0;
    var sum = 0;
    var seleceAll = true;
    for (let i = 0; i < state.carObj.length; i++) {
      if (state.carObj[i].sel) {
        price += state.carObj[i].price * state.carObj[i].num;
        sum += state.carObj[i].num;
      }
      seleceAll *= state.carObj[i].sel;
    }
    return {
      price: price,
      sum: sum,
      seleceAll: seleceAll
    }
  }
}

mutations.js:

export default {
  //只做状态值得修改 不做任何逻辑操作
  addTo(state, carObj) {
    state.carObj = carObj
  }
}

actions.js:

export default {
  // // 异步处理逻辑操作
  initCar({
    commit
  }) {
    let carlist = localStorage.carlist ? JSON.parse(localStorage.carlist) : [];
    commit('addTo', carlist)
  }
}

主要流程:(官网的)


初步理解就是:通过actions的函数改变states(数据),渲染到所有绑定的页面,页面再次调用actions(函数),再次修改


2.png


深层理解:组件触发actions传递数据(抛发),触发mutations修改状态值,修改state的值,渲染到页面

2.png



辅助工具:

import { mapState,mapGetters,mapMutations,mapActions } from 'vuex'

引入辅助工具使组件可以设置或获取到函数及数据

this.$store//获取到store

mapStates:

computed: {
  // 使用对象展开运算符将此对象混入到外部对象中
  ...mapState({
        //state中的变量名
  })
}

mapGetters:

 computed: {
  // 使用对象展开运算符将 getter 混入 computed 对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter'
    ])
  }

mapMutations:

methods: {
    ...mapMutations([
      'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`
      // `mapMutations` 也支持载荷:
      'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.commit('incrementBy', amount)`
    ])
  }

mapActions:

 methods: {
    ...mapActions([
      'increment', // 将 `this.increment()` 映射为 `this.$store.dispatch('increment')`
      // `mapActions` 也支持载荷:
      'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.dispatch('incrementBy', amount)`
    ])
  }


相关文章
|
17天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
3天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
3天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
3天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
3天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
4天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
3天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
4天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
10天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发