zoukankan      html  css  js  c++  java
  • Vue框架(四)——路由跳转、路由传参、cookies、axios、跨域问题、element-ui模块

    路由跳转

    三种方式:

    $router.push / $router.go / router-link to

    this.$router.push('/course');
    this.$router.push({name: course});  //这个name是router.js里面设置的name
    this.$router.go(-1);  //页面后退
    this.$router.go(1);   //前进
    <router-link to="/course">课程页</router-link>
    <router-link :to="{name: 'course'}">课程页</router-link>   

    路由传参

    第一种:

    router.js设置

    routes: [
        // ...
        {
            path: '/course/:id/detail',     //:id接收参数
            name: 'course-detail',
            component: CourseDetail
        },
    ]

    跳转  .vue

    <template>
        <router-link :to="`/course/${course.id}/detail`">{{ course.name }}</router-link>
    </template>
    <script>
        // ...
        goDetail() {
            this.$router.push(`/course/${this.course.id}/detail`);
        }
    </script>

    接收  .vue

    created() {
        let id = this.$route.params.id;
    }

    第二种:

    router.js设置

    routes: [
        // ...
        {
            path: '/course/detail',
            name: 'course-detail',
            component: CourseDetail
        },
    ]

    跳转 .vue

    <template>
        <router-link :to="{
                name: 'course-detail',
                query: {id: course.id}
            }">{{ course.name }}</router-link>
    </template>
    <script>
        // ...
        goDetail() {
            this.$router.push({
                name: 'course-detail',
                query: {
                    id: this.course.id
                }
            });
        }
    </script>

    接收 .vue

    created() {
        let id = this.$route.query.id;
    }

    仓库:vuex

    仓库配置:store.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
        // 全局可以访问的变量 - 获取值
        // 组件内:this.$store.state.title
        state: {
            title: '主页'
        },
        // 全局可以访问的方法 - 修改值
        // 组件内:this.$store.commit('updateTitle', '新值')
        mutations: {
            updateTitle (state, newValue) {
                state.title = newValue
            }
        },
        actions: {}
    })

    赋值
    this.$store.state.title = 'newTitle'
    this.$store.commit('setTitle', 'newTitle')

    
    

    取值
    console.log(this.$store.state.title)

    vue-cookies插件  (设置cookies可以使用)

    安装:在pycharm上面安装

    cnpm install vue-cookies

    main.js配置   (推荐使用第二种设置)

    // 第一种
    import cookies from 'vue-cookies'      // 导入插件
    Vue.use(cookies);                    // 加载插件
    new Vue({
        // ...
        cookies,                        // 配置使用插件原型 $cookies
    }).$mount('#app');
    
    // 第二种
    import cookies from 'vue-cookies'    // 导入插件
    Vue.prototype.$cookies = cookies;    // 直接配置插件原型 $cookies

    使用  (增删改查cookies)

    // 增(改): key,value,exp(过期时间)
    // 1 = '1s' | '1m' | '1h' | '1d'
    this.$cookies.set('token', token, '1y');
    
    // 查:key
    this.token = this.$cookies.get('token');
    
    // 删:key
    this.$cookies.remove('token');

    注意:cookies一般都是用来存储token的

    // 1) 什么是token:安全认证的字符串
    // 2) 谁产生的:后台产生
    // 3) 谁来存储:后台存储(session表、文件、内存缓存),前台存储(cookie)
    // 4) 如何使用:服务器先生成反馈给前台(登陆认证过程),前台提交给后台完成认证(需要登录后的请求)
    // 5) 前后台分离项目:后台生成token,返回给前台 => 前台自己存储,发送携带token请求 => 后台完成token校验 => 后台得到登陆用户

    前后台交互:axios插件

    这个类似之前讲的ajax

    安装:也是在pycharm中安装

    cnpm install axios

    main.js配置

    import axios from 'axios'    // 导入插件
    Vue.prototype.$axios = axios;    // 直接配置插件原型 $axios

    使用

    this.$axios({
        url: '请求接口',
        method: 'get|post请求',
        data: {post等提交的数据},
        params: {get提交的数据}
    }).then(请求成功的回调函数).catch(请求失败的回调函数)

    //举例
    get请求方式
    this.$axios({
    url: 'http://127.0.0.1:8000/test/ajax/',
    method: 'get',
    params: {
    username: this.username
    }
    }).then(function (response) {
    console.log(response)
    }).catch(function (error) {
    console.log(error)
    });

    post请求方式
    this.$axios({
    url: 'http://127.0.0.1:8000/test/ajax/',
    method: 'post',
    data: {
    username: this.username
    }
    }).then(function (response) {
    console.log(response)
    }).catch(function (error) {
    console.log(error)
    });

    跨域问题(同源策略)

    产生跨域问题的原因

    // 后台接收到前台的请求,可以接收前台数据与请求信息,发现请求的信息不是自身服务器发来的请求,拒绝响应数据,这种情况称之为 - 跨域问题(同源策略 CORS)
    
    // 导致跨域情况有三种
    // 1) 端口不一致
    // 2) IP不一致
    // 3) 协议不一致

    解决方法在django项目中下载django-cors-headers模块

    // 1) 安装:pip3 install django-cors-headers
    // 2) 注册:在settings.py文件
    INSTALLED_APPS = [
        ...
        'corsheaders'
    ]
    // 3) 设置中间件:
    MIDDLEWARE = [
        ...
        'corsheaders.middleware.CorsMiddleware'
    ]
    // 4) 设置跨域:
    CORS_ORIGIN_ALLOW_ALL = True

    element-ui插件   类似于bootstrap往里面找各种样式

    安装

    cnpm i element-ui -S

    main.js配置

    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    Vue.use(ElementUI);

    使用

    依照官网 https://element.eleme.cn/#/zh-CN/component/installation api  复制粘贴
  • 相关阅读:
    EBS SQL > Form & Report
    oracle sql 优化分析点
    MRP 物料需求计划
    MRPII 制造资源计划
    Barcode128 应用实务
    Oracle SQL语句优化技术分析
    APPSQLAP10710 Online accounting could not be created. AP Invoice 无法创建会计分录
    Oracle数据完整性和锁机制
    ORACLE Responsibility Menu Reference to Other User
    EBS 常用 SQL
  • 原文地址:https://www.cnblogs.com/wangcuican/p/11656290.html
Copyright © 2011-2022 走看看