Vue项目,使用响应式布局插件 postcss-px-to-viewport,达成自适应宽高比
安装
npm install postcss-px-to-viewport --save-dev
在项目的根目录下创建 postcss.config.js
module.exports = {
plugins:{
autoprefixer:{},
"postcss-px-to-viewport":{
viewportWidth:375,//视窗的宽度,对应的是我们设计稿的宽度
viewportHeight:667,//视窗的高度,对应的是我们设计稿的高度
unitPrecision:5,//制定‘px’转换为视窗单位的小数位数(很多时候无法整除)
viewportUnit:'vw',//指定需要转换成的视窗单位,建议使用vw
selectorBlackList:['ignore','tab-bar','tab-bar-item'],//指定不需要转换的类,
minPixelValue:1,//小于或等于‘1px’不转换为视窗单位
mediaQuery:false//允许在媒体查询中转换为‘px’
},
}
}
vue修辞符-注没用过!!!
.native 将一个vue组件变成一个普通的html,使其可以监听click等原生事件
<Tag @click.native="handleClick">ok</Tag>
Vue常用工具函数总结
1.识别ie浏览器
export const IsIE = ()=>{
let explorer = window.navigator.userAgent;
//判断是否为IE浏览器
if(explorer.indexOf('MSIE') >= 0){
return true ;
}else{
return false
}
}
如何基于axios二次封装一个具有 请求/响应拦截的http请求
index.js
import axios from 'axios'
import qs from 'qs'
//请求拦截
axios.interceptors.request.use(config => {
//此处可以封装一些加载状态
return config
},error => {
return Promise.reject(error)
})
//响应拦截
axios.interceptors.response.use(response => {
return response
},error => {
return Promise.resolve(error.response)
})
function checkStatus (response) {
// 此处可以封装一些加载状态
// 如果http状态码正常,则直接返回数据
if(response) {
if (response.status === 200 || response.status === 304) {
return response.data
// 如果不需要除了data之外的数据,可以直接 return response.data
} else if (response.status === 401) { //401代表用户没有访问权限,需要进行身份认证
location.href = '/login';
} else {
throw response.data
}
} else {
throw {data:'网络错误'}
}
}
//axios 默认参数配置
axios.default.baseURL = '/api/v0';
axios.default.timeout = 10000;
export function post (url,data) {
return axios({
method:'post',
url,
data:qs.stringify(data),
headers:{
'X-request-With':'XMLHTTPRequest',
'Content-Type':'application/x-www-form-urlencoded;charest=UTF-8'
}
}).then((res)=>{
return checkStatus(res)
})
}
export function get (url, params) {
return axios({
method: 'get',
url,
params, // get 请求时带的参数
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
}).then(
(res) => {
return checkStatus(res)
}
)
},
export function del (url, params) {
return axios({
method: 'delete',
url,
params, // get 请求时带的参数
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
}).then(
(res) => {
return checkStatus(res)
}
)
}
}
export default axios;
配置完 main.js 上
这个是挂原型链上的
import Axios from “./tools/axios”;
Vue.prototype.$http = Axios;
serve.js 封装API
//导入axios配置...
import request from '@/tools/axios'
//导出封装的api请求方法
export async function loginApi (data) {
const res = await request({
url:`${API_ROUTER.BASE_URL}/Indentity/ChangePasswordAsync`,
method:'post',
data,
});
return res
}
//调用后
import { UserInfoAsync} from "./servers";
const UserInfoAsync(parama)
vue项目中实用的自定义指令
例子注册一个全局自定义指令 ‘v-focus’
Vue.directive('focus',{
//单绑定的元素插入dom时
inserted:function(el){
el.focus()
}
});
<input v-focus />
V-clipboard ( 点击复制内容到粘贴板功能)
安装
npm install -save v-clipboard
引用
import Vue from 'vue'
import Clipboard from 'v-clipboard'
Vue.use(Clipboard)
<div @click="handleCopy(scope.row.name)">{{ scope.row.name }}</div>
methods: {
handleCopy(value) {
this.$clipboard(value)
this.$message.success('已复制到粘贴板')
}
}
Vue-Lazyload (图片懒加载)
安装
npm install --save vue-lazyload
import loading from './assets/common/loading.gif'
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
preload: .8,
loading,
// error,
})
3、使用
<img v-lazy="https://www.domain.com/image.jpg">