Vue散乱知识点

98 阅读2分钟

创建文件注意点

//Gitee 基于Git的代码托管和研发协作平台
# 创建文件夹
mkdir 文件夹名称
# 创建文件
touch 文件名称
# git bash复制粘贴的快捷键
shift + insert/ins   粘贴
ctrl + insert/ins    复制gi
# 克隆仓库
git clone 仓库地址
# 初始化一个本地的仓库
git init
# 连接一个远程仓库[这一句可以不用背]
git remote add origin 仓库地址
# 列出要提交的文件
# 上传整个项目 用git add .
git add 文件名
# 提交文件到本地暂存区
git commit -m "提交的信息,要求是字符串"
# 推送到远程仓库
git push origin 分支名
# 拉取远程仓库
git pull origin 分支名
# 检测分支
git branch
# 创建并切换分支(dev) - 在本地仓库创建了分支,创建完后,需要做一次提交
git checkout -b 分支名  或   git switch -c 分支名
# 切换分支(切换分支一定要记得先做commit提交,至少是提交到本地)
git checkout 分支名   或   git switch 分支名
# 检查分支状态
git status
# 合并分支(在master分支下,把dev合并过来)
git merge 另一个分支的名称
    # 一行查看日志
git log --pretty=oneline
# 版本回滚
git reset --hard 版本号
# 代码冲突
当合并过来的代码跟自身的代码在同个位置有不同的地方,那么就会产生冲突,这个时候可以借助vscode解决

// Viscode 设置自动给保存

项目小技巧

1、快速修改某个数组中一个或多个对象的属性名


JSON.parse(JSON.stringify(data).replace(/name1/g, 'new_name1').replace(/name2/g, 'new_name2').replace(/name3/g, 'new_name3')...)
// 先进性深拷贝,再做替换name1
// 表示旧属性名,new_name表示新属性名

2、样式深度修改

 // 碰到vantui的样式你无法替换,可以尝试在类名前面加 /deep/
/deep/.box{
        color: red;
    }

3、 组件更新

// 局部更新组件 本质就是修改  key   父组件接收 
<Header :key="changekey" @changekeyfn="changekeyfn" />
data(){
    return{
        changekey:0
    }
},
methods:{
	// 更新key值
    changekeyfn(){
        this.changekey++;
    }
}
// Header.vue  子组件
this.$emit('changekeyfn') // 不用传参
// 触底  
//获取滚动时的高度
        let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
        // 浏览器窗口(文档)的可视高度(windowHeight):(就是你肉眼可见的那部分全屏高度)
        let windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
        // 文档的真实高度(scrollHeight):
        let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
//  鼠标移到底部 
scrollTop+ windowHeight >= scrollHeight 

4、 拦截器封装、 axios

// src目录下创建 reqesst文件
// reqesst文件下 添加 api.index  request.js

// api.js
import request from './request'
import qs from 'qs' (需要就下载添加)
// 请求数据(不带参数)
export const GetHomeLists = () => request.get('接口')
// get 请求带参
export const GetSearchList = (params) => request.get('接口', {params});
// 本接口content-type为x-www-form-urlencoded post请求
export const AddToCartApi = (params) => request.post("接口", qs.stringify(params))

//  request.js
// 封装axios
import axios from 'axios'
// 创建一个单例
const instance = axios.create({
    baseURL: "http://xxxxxxxxxxxx",
    timeout: 5000
})
// 请求拦截器
instance.interceptors.request.use(config=>{
    let token = localStorage.getItem("x-auth-token");
    if(token){
        //设置请求头 如果有token,这个请求就带上token
        config.headers["x-auth-token"] = token;
    }
    return config;
}, err=>{
    return Promise.reject(err)
})
// 响应拦截器
instance.interceptors.response.use(res=>{
    return res.data;
}, err=>{
    return Promise.reject(err)
})
export default instance

5、路径提示

  • 安装 Path Intellisense插件
  • 打开设置 - 首选项 - 搜索 Path Intellisense - 打开 settings.json ,添加:
"path-intellisense.mappings": {
     "@": "${workspaceRoot}/src"
 }
  • 在项目 package.json 所在同级目录下创建文件 jsconfig.json
{
    "compilerOptions": {
        "target": "ES6",
        "module": "commonjs",
        "allowSyntheticDefaultImports": true,
        "baseUrl": "./",
        "paths": {
          "@/*": ["src/*"]
        }
    },
    "exclude": [
        "node_modules"
    ]
}
  • 重启vscode

6、端口配置【重点】

// 如果想要更改8080端口,可以在根目录下新建 vue.config.js 中:
module.exports = {
    devServer: {
        port: 3000
    }
}

7、代理配置

我们对 vue.config.js 进行配置:

module.exports = {
    devServer: {
        port: 3000,
        proxy: {
            '/api': {
                target: "http://kumanxuan1.f3322.net:8001/",
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
    }
}

8、v-model与state

理论上,修改state的值,唯一的途径是通过mutations。所以v-model直接使用state的值会出现问题,因此,我们可以借助computed属性来解决这个场面:

* store中:
const store = new Vuex.Store({
	state: {
		val: "你好,Vue"
	},
    mutations: {
        changeVal(state, payload){
            state.val = payload;
        }
    }
})

* 组件中:
<input v-model="value" />
<script>
export default {
    computed: {
        value: {
            get(){
                return this.$store.state.val;
            },
            set(val){
                this.$store.commit("changeVal", val);
            }
        }
    }
}
</script>

9、Actions中获取State的值

可以在 {commit} 之后追加 rootState

getGoodsList({ commit, rootState }) {
      GetSearchGoodsList({
        params: {
          keyword: rootState.searchVal,
          ...
        }
      }).then(res=>{
        ...
      })

10、监听

<template>
  <div class="home">
    <input type="text" v-model="msg">
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      msg: "你好"
    };
  },
  watch: {
    msg: {
      handler(val, oldVal) {
        console.log(123)	// 在最初绑定时直接打印123
        // console.log(val, oldVal);
      },
      immediate: true  // 立即监听
      deep: true   // 深度监听(发杂数据类型)
    }
  }
};
</script>

11、ref与$refs(掌握)

//   vue中获取页面里的某个元素(标签或组件),可以给它绑定ref属性,有点类似于给它添加id名。
<template>
 <div class="">
     <h3 ref="title">{{msg}}</h3>
     <button @click="btnclick">按钮</button>
 </div>
</template>
 
<script>
export default {
  data() {
    return {
      msg: "你好"
    };
  },
  methods: {
    btnclick() {
      console.log(this.$refs.title);		// 得到h3标签
      console.log(this.$refs.title.innerHTML);		// 得到h3标签的文本
    }
  }
};
</script>