Vue小记

本文介绍了Vue.js的安装步骤,包括Node.js和npm的安装,VueCLI的使用,以及项目初始化和打包过程。此外,还讲解了Vue的语法特性如v-on、v-bind的简写形式,箭头函数的使用以及异步操作处理。同时,提到了Vue中处理跨域的方法,ElementUI框架的使用,Markdown编辑器的集成,以及路由配置和时间格式化的方法。
摘要由CSDN通过智能技术生成

vue安装

  1. 安装nodejs
    http://nodejs.cn/download/ 下载安装,node安装完成npm也就安装完成,查看版本
    node -vnpm -v
  2. 安装vue
    (sudo) npm install -g vue-cli
    vue -V

代码管理

代码提交时会忽略node_modules文件夹,生成node_modules命令:npm install
引入模块npm install vue-router

vue使用

更新依赖

npm install

初始化项目

进入项目目录vue init webpack vueapp

打包
  1. config/index.js里的assetsPublicPath的字段’/‘->’./’
  2. npm run build

语法

  1. vue import 中@代表src路径
  2. v-on可以替换为@,比如<p v-on:click=""> -> <p @click="">
  3. v-bind,动态绑定,可以替换为:,比如<el-submenu :index="subMenu1.id + ''" v-for="subMenu1 in menuRoot.subMenuWebList">等价于<el-submenu v-bind:index="subMenu1.id + ''" v-for="subMenu1 in menuRoot.subMenuWebList">
  4. ()=>箭头函数
    ()=>相当于function(),但是箭头函数不改变this的指向。如果用function,里面this指的函数本身,而不是全局对象
let ws = new WebSocket("ws://127.0.0.1:28080/websocket");
ws.onopen = function ()
{
    ws.send("login://"+this.loginname+":connected");
    this.websocket = ws;//this指向函数,而不是全局的websocket对象
};
          
  //改为
  
  let ws = new WebSocket("ws://127.0.0.1:28080/websocket");
  ws.onopen = ()=>
  {
    ws.send("login://"+this.loginname+":connected");
    this.websocket = ws;
  };
  
  //或者
  
  let that = this
  ws.onopen = function ()
  {
    ws.send("login://"+this.loginname+":connected");
    that.websocket = ws;
  };
  1. 异步转同步Promise
const get = function (url, params) {
  return new Promise((resolve, reject) => {
    axios.get($api[url], { params }).then((res) => {
      if (res) {
        const { code, data, message } = res.data
        if (code == NO_ERR) {
          resolve(data)
        } else {
          Vue.prototype.$toast(message)
          // reject(`${url}: ${code} -- ${message}`)
        }
      }
    }).catch((err) => {
      reject(err)
    })
  })
}
Json使用

字符串转为对象:JSON.parse(jsonString);
对象转为字符串:JSON.stringify(object);
list(数组)对象:list[index]
对象获取属性:object.name

引入配置文件
  1. 创建js文件src/api/global.js
const baseUrl = "http://localhost:8100/"

export default {
  baseUrl
}
  1. 将js import到vue中直接使用
import global from '@/api/global'
...
var baseUrl = global.baseUrl
  1. 全局引用:将js import到main.js中,使用Vue.prototype.GLOBAL创建别名,使用this即可访问
//main.js中
import global from '@/api/global'

Vue.prototype.GLOBAL = global;

//xxx.vue中
//使用属性
var baseUrl = this.GLOBAL.baseUrl;

//使用公共方法
<span @click="GLOBAL.goback()">返回</span>
跨域设置

允许携带cookieaxios.defaults.withCredentials = true

生命周期

mounted:html加载完之后执行
created:渲染成html前执行

框架

element ui:
https://element.eleme.cn/2.0/#/zh-CN

markdown

使用mavon-editor模块
官网:https://www.npmjs.com/package/mavon-editor
博客:https://blog.csdn.net/wn1245343496/article/details/82147850

Ajax

使用axios模块实现
官网:http://www.axios-js.com/
npm install axios
import axios from 'axios'

axios.post(url,{"dtdate":select.value,"teacheremail":this.teacheremail}).then(resp => {
    this.unhandledList = resp.data.data
  }).catch(err => {
    console.log('请求失败:'+err.status+","+err.statusText)
  })
addBlog2(){
  var url = this.GLOBAL.baseUrl + "blog/saveBlog";
  var userid = 1;
  axios({
    method:"post",
    url:url,
    data:{
      "content":this.content,
      "userid":userid
    }
  }).then((res)=>{
    console.log(res.data);
  })
}

form-data格式发送请求

axios({
        url: $api[url],
        method: 'post',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        data: params,
        transformRequest: [function (data) {
          let ret = ''
          for(let item in data) {
            ret += `${encodeURIComponent(item)}=${encodeURIComponent(data[item])}&`
          }
          return ret
        }]
      }).then(res => {
        resolve(res.data)
      }).catch(err => {
        reject(err)
      })
    })

路由:router

官网:https://router.vuejs.org/zh/guide/#html
npm install vue-router

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

传参:

//props注册 main.js中
const routes = [
  { path: '/blogAdd', component: BlogAdd },
  { path: '/blogList', component: BlogList },
  { path: '/blogView', component: BlogView,props:{id:143661634716673} }
]
//query复制 blogList中
this.$router.push({path:"/blogView",query:{id:id}});
//$route.query取值
mounted() {
    this.getBlog(this.$route.query.id);
}

时间格式化显示

    //js方法
    timestampToTime (cjsj) {
      var date = new Date(cjsj) //时间戳为10位需*1000,时间戳为13位的话不需乘1000
      var Y = date.getFullYear() + '-'
      var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'
      var D = date.getDate() + ' '
      var h = date.getHours() + ':'
      var m = date.getMinutes() + ':'
      var s = date.getSeconds()
      return Y+M+D+h+m+s
    }
    //标签中使用
    {{timestampToTime(createTime)}}

CheckList问题列表

1. Vue打包后路径匹配不到无法显示问题:

在config/index.js文件中将build下的assetsPublicPath: '/',改为assetsPublicPath: './',

2. 打包后ElementUi下icon(或fonts字体目录)路径找不到,多了两级目录:

将build/utils.js中的generateLoaders方法下

  return ExtractTextPlugin.extract({
    use: loaders,
    fallback: 'vue-style-loader'
  })

改为

  return ExtractTextPlugin.extract({
    use: loaders,
    fallback: 'vue-style-loader',
    publicPath: '../../'
  })
3. 请求发送后,收不到参数。浏览器network的header中不显示参数发送

问题在错误信息中 errorMessage

报错信息"Cannot read property 'install' of undefined"表示无法读取未定义的属性'install'。根据引用提到的问题,这个错误通常发生在使用了不兼容的版本时,例如在Vue2使用了高版本的vue-router。解决方法是降低vue-router版本以适配Vue2。 此外,根据引用提到的情况,问题可能出现在项目引入的某个插件或模块上,可能是由于插件包升级或插件引入不正确导致的。你可以检查一下你的项目是否有类似的情况,并尝试根据引用提到的解决方案进行调整。 总结起来,"Cannot read property 'install' of undefined"的错误可能是由以下原因引起的: 1)使用了不兼容的版本,例如在Vue2使用了高版本的vue-router;2)插件包升级或插件引入不正确。你可以尝试降低vue-router版本或检查项目引入的插件是否正确。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [made-mistakes-gatsby:用盖茨比建立的个人网站](https://download.csdn.net/download/weixin_42131443/18196195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [app.js:587 Uncaught TypeError: Cannot read property ‘install‘ of undefined](https://blog.csdn.net/mmxiguang/article/details/128399595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue-cli 打包部署项目 报错 Uncaught TypeError: Cannot read property ‘install‘ of undefined 小记](https://blog.csdn.net/bosslay/article/details/115192677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值