Vue使用过程小记(持续更新)
指令
- v-bind可以绑定对象
<!-- 绑定一个有属性的对象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
<!-- 通过 prop 修饰符绑定 DOM 属性 -->
<div v-bind:text-content.prop="text"></div>
<!-- prop 绑定。“prop”必须在 my-component 中声明。-->
<my-component :prop="someThing"></my-component>
<!-- 通过 $props 将父组件的 props 一起传给子组件 -->
<child-component v-bind="$props"></child-component>
<!-- XLink -->
<svg><a :xlink:special="foo"></a></svg>
利用函数来传递数据有奇效
// 表格是否可以勾选判断条件
selectable: {
type: Function,
default: () => {
return true;
}
}
vue的dispatch
- 同级的
actions
可以引入dispatch
GenerateRoutes({ dispatch, commit }, data) {
...
}
dispatch
最多就只接受两个参数,type
和payload
传递第三个,为undefined
dispatch('AddRoutesIndex', {
routes: accessedRouters,
index: schoolRouterIndex
});
ElementUI中el-tabs组件中el-table的宽度问题
在tabs使用table会出现滚动条遮住内容可以使用v-if
控制el-tab-pane
里的内容 例如v-if="activeName === 'second'"
通过跨域方式获取信息
项目token.html
引入cross-storage可以跨域获取信息
// utils/auth.js
var iportal = new CrossStorageClient('token.html');
iportal.onConnect().then(() => iportal.get(accessToken)).then(token_list => {
const tokenObj = JSON.parse(token_list); // { "access_token":"4bd53dcc-2e94-4652-9463-d4495c2509ad", "token_type":"bearer", ... }
resolve(tokenObj);
});
RefreshToken获取方案
// /config/fetch.js
...
let isRefreshing = false; // refresh_token是否刷新成功
let queueRequests = []; // refresh_token刷新并行接口集合队列
switch (status) {
case 401:
const { config } = error.response;
if (!isRefreshing) {
isRefreshing = true;
const refreshToken = RefreshToken.getInstance(store.state.config.webIportalURL);
return refreshToken.init().then(token => {
if (token && token.refresh_token && token.isPastDue) {
config.headers.Authorization = token.token_type + ' ' + token.access_token;
config.url = config.url.substr(config.url.indexOf('api/') + 4);
queueRequests.forEach((cb) => cb(token))
// 重试完清空这个队列
queueRequests = []
return axios(config);
} else {
...
}
}).finally(() => {
isRefreshing = false
});
} else {
return new Promise((resolve) => {
// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
queueRequests.push((token) => {
config.headers.Authorization = token.token_type + ' ' + token.access_token;
config.url = config.url.substr(config.url.indexOf('api/') + 4);
resolve(axios(config));
})
})
}
break;
case 403:
...