• 工作日记(十二):完整项目开发之完美解决测试时vue跨域与mounted不执行问题


    2020.7.22

    今日继续开发前端。

    顺便一提,前端用的vue框架是:

    vue-element-admin(elementUI)

    今日前端需要与后端进行测试了(还不算正式联调,只在本地测试),因此解决了前后端分离时vue与本地项目端口不一致导致跨域无法访问的问题,具体如下:

    一、完美解决测试时vue跨域问题(亲测可用):

    1.修改vue.config.js文件

    将【项目/vue.config.js】文件中的devServer标签的内容改为:

    devServer:{
      port: port,
      open: true,
      overlay: {
        warnings: false,
        errors: true
      },
      //配置代理
      proxy: {
        "/": {
              target: "http://127.0.0.1:8089", //本地后台路径
              changeOrigin: true
        }
      }
    
    },

    2.修改.env.development文件

    将【项目/.env.development】文件中的VUE_APP_BASE_API改为:

    #VUE_APP_BASE_API = 'dev-api'
    VUE_APP_BASE_API = 'http://127.0.0.1:8089'

    3.修改article.js文件

    (1)在【项目/src/api/article.js】文件中新增测试用的模板请求方法,例如:

    export function getListPost(query){
      return request({
        url: 'http://127.0.0.1:8089/list',
        method: 'post',
        data: query
      })
    }

    *注意,这个方法是【post】方法,使用【data】字段,发送的是json格式的数据(似乎被封装好了,自带contentType,大概)

    (2)如果要用键值对的形式传参,可以这样写:

    export function getListGet(query){
      return request({
        url: 'http://127.0.0.1:8089/list',
        method: 'get',
        params: query
      })
    }

    *注意,这个方法是【get】方法,使用【params】字段,发送的是正常的键值对格式的数据。

    4.在后台Controller.java类上加注解@CrossOrigin

    这个注解可以加在整个类上,相应的其中的方法就都支持跨域了。(注意不要提交svn,只是自测用的,生产上不用这个注解,应该)

    5.开始测试

    在前端使用刚才写好的getListPost(getListGet)方法,即可获取到本地启动的不同端口的后端数据了。

    二、使用dialog显示其它页面时mounted只执行一次的问题

    本人想实现一个效果,在第一个页面使用el-dialog展示第二个页面;当第二个页面出现时,便自动执行某个方法;

    于是在第二个页面的mounted标签中写了需要自动执行的方法;

    但是出现了mounted方法只执行一次的问题,只有首次dialog出现时执行一次,之后关闭并重新打卡dialog,mounted方法都不执行了;

    这不符合需求。

    因此通过百度发现,第一个页面的dialog标签外需要再嵌套一个div才可以,如下:

    <div v-if="isShowDialog">
      <el-dialog :visible.sync="isShowDialog" append-to-body>
        <mypage @close="myfunction" />
      </el-dialog>
    </div>

    三、其余vue问题与解决办法

    1.如果希望el-input标签变为只读模式(不能写,但是可以复制),可以用这段代码:

    <el-input v-model="this.id" readOnly></el-input>
    

    只要在标签内直接加【readOnly】就可以了,不需要在data中声明相应的变量。

    2.有一个需求,要完成数据的"编辑"页与"详情"页;因此本人将这两个页合并为一个页面.vue了;区别就是el-input是否有readOnly,以及加了一些【v-if】决定隐藏与展示的标签。

    3.vue中冒号【:】的用法:

    有些标签中有【label】字段,例如:

    <el-form-item label="名称">
      <el-input v-model="this.name"></el-input>
    </el-form-item>

    此时页面中会出现"名称"的标签;

    如果想让这个标签的名字按照变量内容显示,可以这样写:

    <el-form-item  :label="this.name">
      <el-input v-model="this.name"></el-input>
    </el-form-item>

    增加了冒号,vue就会按照变量的值显示这个标签的名称,对应的变量如下:

    data: function(){
      return{
        name: "abc"
      };
    },

    大概就在这个位置写变量(分号;与逗号,是否需要请根据实际情况测试,多了的话似乎会报错)。

    不只是label,其它标签好像也可以使用【:】来实现标签内容从变量的值中获取;这应该就是vue的方便之处吧。

  • 相关阅读:
    Git+GitHub+SaltStack
    系统运维
    Linux之Ubuntu
    TCP/IP 必知必会的十个问题
    Github常见操作和常见错误!
    Git钩子:自定义你的工作流
    Spring 梳理
    Spring 梳理
    Spring 梳理
    Spring boot 官网学习笔记
  • 原文地址:https://www.cnblogs.com/codeToSuccess/p/13906198.html
Copyright © 2020-2023  润新知