vue小知识
1.动态绑定图片加载失败,设置一个默认的图片
<img
:src
='avatar.url?avatar.url:defaultImg'/>
export default {
data(){
return {
defaultImg
:require('图片的路径')
}
}
}
2.动态绑定背景图片
<div
class="right-con" :style
="{backgroundImage: 'url('+ (coverImgUrl ? coverImgUrl : baseImg) + ')', backgroundSize:'contain'}">
</div
>
3.在 vue-cli 创建的文件中使用 jquery
a. 这是一种比较麻烦的方法
安装依赖
npm install jquery
--save
在 Vue.config.js 文件中配置 (在 3.0 以上,webpack.base.conf.js 文件中的设置改到在 vue.config.js 文件中设置),如果你的项目中没有 vue.config.js 文件,请你在 package.json 文件的同级目录新建一个 vue.config.js 文件 配置代码如下:
const webpack
= require('webpack');
module
.exports
= {
configureWebpack
: {
plugins
: [
new webpack.ProvidePlugin({
$
: 'jquery',
jQuery
: 'jquery',
'window.jQuery': 'jquery',
Popper
: ['popper.js', 'default'],
}),
],
},
};
在要使用的文件中导入 ,然后正常使用就正常的使用 jquery 可以了
import $
from 'jquery';
b. 直接引入 jquery 文件
在 vue-cli 框架生成的目录结构中,有一个 public 文件夹,下面有一个.html 的文件,然后直接引入 cdn 或者在 cdn 把源码下载到本地,然后再引入也是可以的
<script src
="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script
>
<script src
="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script
>
4.在 vue 里面使用 axios 发送请求更换图片
<input id
="uploadFile" type
="file" style
="display:none" @click
="clickChangeFile" />
<img id
="uploadImg" src
="defaultImg" alt
="我是默认图片" @click
="clickChangeImg" />
import $
from 'jquery'
import {post
} from 'utils.js'
export default {
data(){
return {
defaultImg
:"../../../assests/img.jpg"
}
},
methods
:{
clickChangeImg() {
$("#uploadFile").click();
},
clickChangeFile() {
$("#uploadFile").change(function(event
) {
var formData
= new FormData();
formData
.append("file", event
.currentTarget
.files
[0]);
let config
= {
headers
: { "Content-Type": "multipart/form-data" }
};
post(
"http://127.0.0.1:3000/api/v1/file_uploads",
formData
,
config
).then(res
=> {
$("#uploadImg").attr("src", "http://localhost:3000" + res
.data
.info
);
});
});
}
}
}
import axios
from 'axios';
const instance
= axios
.create({
timeout
: 3000,
});
export const post = (url
, data
, config
) => instance
.post(url
, data
, config
);
具体的配置详见 axios,github 官网
5.vue 全局请求拦截和全局响应拦截
import axios
from 'axios';
const instance
= axios
.create({
timeout
: 5000,
});
instance
.interceptors
.request
.use(
function(config
) {
config
.headers
.authorization
= `Bearer ${localStorage.getItem('token')}`;
return config
;
},
function(error
) {
return Promise
.reject(error
);
}
);
instance
.interceptors
.response
.use(
function(response
) {
return response
;
},
function(error
) {
if (error
.response
&& error
.response
.status
=== 401) {
window
.location
.href
= '#/login';
}
return Promise
.reject(error
);
}
);
具体的配置详见 axios,github 官网
6.用 nodejs 解决跨域的问题
a.首先介绍一下什么是跨域
指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对 javascript 施加的安全限制。
b.具体操作代码如下
b-1.安装 express
基于 Node.js 平台,快速、开放、极简的 Web 开发框架
npm install express --save
b-2.安装 axios.发送请求使用
npm install axios --save
b-3.安装 cors
npm install cors
CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。目前,所有浏览器都支持该功能,IE 浏览器不能低于 IE10。
const express
= require('express');
const cors
= require('cors');
const axios
= require('axios').default;
const app
= express();
const instance
= axios
.create({
httpsAgent
: new https.Agent({
rejectUnauthorized
: false,
}),
});
app
.use(cors());
app
.use(express
.urlencoded());
app
.use(express
.json());
app
.post('/api/v1/proxy', async (req
, res
) => {
const result
= await axios
.get(req
.body
.url
);
res
.json(result
.data
);
});
app
.listen(8000, () => console
.log('服务器运行于8000端口'));
b-4 使用方式
export function HotMovies() {
return post('http://localhost:8000/proxy/api/v1/proxy', {
url
: 'https://api-m.mtime.cn/Showtime/LocationMovies.api?locationId=290',
});
}
axios
.post('http://localhost:8000/proxy/api/v1/proxy', {
url
: 'https://api-m.mtime.cn/Showtime/LocationMovies.api?locationId=290',
})
.then(res
=> {
const data
= res
.data
;
});