07 Vue插件 - 图1


项目功能插件

1、vue-router

  1. {
  2. path: '/',
  3. name: 'home',
  4. // 路由的重定向
  5. redirect: '/home'
  6. }
  7. {
  8. // 一级路由, 在根组件中被渲染, 替换根组件的<router-view/>标签
  9. path: '/one-view',
  10. name: 'one',
  11. component: () => import('./views/OneView.vue')
  12. }
  13. {
  14. // 多级路由, 在根组件中被渲染, 替换根组件的<router-view/>标签
  15. path: '/one-view/one-detail',
  16. component: () => import('./views/OneDetail.vue'),
  17. // 子路由, 在所属路由指向的组件中被渲染, 替换该组件(OneDetail)的<router-view/>标签
  18. children: [{
  19. path: 'show',
  20. component: () => import('./components/OneShow.vue')
  21. }]
  22. }
  1. <!-- router-link渲染为a标签 -->
  2. <router-link to="/">Home</router-link> |
  3. <router-link to="/about">About</router-link> |
  4. <router-link :to="{name: 'one'}">One</router-link> |
  5. <!-- 为路由渲染的组件占位 -->
  6. <router-view />
  1. a.router-link-exact-active {
  2. color: #42b983;
  3. }
  1. // router的逻辑转跳
  2. this.$router.push('/one-view')
  3. // router采用history方式访问上一级
  4. this.$router.go(-1)

2、vuex

  1. // 在任何一个组件中,均可以通过this.$store.state.msg访问msg的数据
  2. // state永远只能拥有一种状态值
  3. state: {
  4. msg: "状态管理器"
  5. },
  6. // 让state拥有多个状态值
  7. mutations: {
  8. // 在一个一个组件中,均可以通过this.$store.commit('setMsg', new_msg)来修改state中的msg
  9. setMsg(state, new_msg) {
  10. state.msg = new_msg
  11. }
  12. },
  13. // 让mutations拥有多个状态值
  14. actions: {
  15. }

3、vue-cookies

  1. // 安装cookie的命令
  2. // npm install vue-cookies --save
  3. // 为项目配置全局vue-cookie
  4. import VueCookies from 'vue-cookies'
  5. // 将插件设置给Vue原型,作为全局的属性,在任何地方都可以通过this.$cookie进行访问
  6. Vue.prototype.$cookies = VueCookies
  1. // 持久化存储val的值到cookie中
  2. this.$cookies.set('val', this.val, 300)
  3. // 获取cookie中val字段值
  4. this.$cookies.get('val')
  5. // 删除cookie键值对
  6. this.$cookies.remove('val')

4、axios

  1. import axios from 'axios' # 安装的模块不用加相对路径
  2. axios.get().then()
  1. // 安装 axios(ajax)的命令
  2. // npm install axios--save
  3. // 为项目配置全局axios
  4. import Axios from 'axios'
  5. Vue.prototype.$ajax = Axios
  1. let _this = this
  2. this.$ajax({
  3. method: 'post',
  4. url: 'http://127.0.0.1:5000/loginAction',
  5. params: {
  6. usr: this.usr,
  7. ps: this.ps
  8. }
  9. }).then(function(res) {
  10. // this代表的是回调then这个方法的调用者(axios插件),也就是发生了this的重指向
  11. // 要更新页面的title变量,title属于vue实例
  12. // res为回调的对象,该对象的data属性就是后台返回的数据
  13. _this.title = res.data
  14. }).catch(function(err) {
  15. window.console.log(err)
  16. })
  1. # 用pycharm启动该文件模拟后台
  2. from flask import Flask, request, render_template
  3. from flask_cors import CORS
  4. app = Flask(__name__)
  5. CORS(app, supports_credentials=True)
  6. @app.route('/')
  7. def index():
  8. return "<h1>主页</h1>"
  9. @app.route('/loginAction', methods=['GET', 'POST'])
  10. def test_action():
  11. # print(request.args)
  12. # print(request.form)
  13. # print(request.values)
  14. usr = request.args['usr']
  15. ps = request.args['ps']
  16. if usr != 'abc' or ps != '123':
  17. return 'login failed'
  18. return 'login success'
  19. if __name__ == '__main__':
  20. app.run()

5、跨域问题解决

  1. # http://www.mei.com/silo/women 响应头中Access-Control-Allow-Origin: * 允许所有的域访问
  2. # 以猫眼电影为例 :https://m.maoyan.com/#movie
  3. # devServer.proxy
  4. # https://cli.vuejs.org/zh/config/#devserver-proxy

vue.config.js

  1. module.exports = {
  2. devServer: {
  3. proxy: {
  4. '/ajax': {
  5. target: 'https://m.maoyan.com/',
  6. changeOrigin: true
  7. }
  8. }
  9. }
  10. }

组件中

  1. import axios from 'axios'
  2. mounted () {
  3. axios.get('ajax/moreClassicList?sortId=1&showType=3').then(res => {
  4. console.log(res.data)
  5. })
  6. }