正则提取 cookie
1 2 3 4
| if (document.cookie.match(/username=.*/)) { let username = document.cookie.match(/username=.*/)[0].slice(9); this.loginForm.username = username; }
|
下载绕过弹窗
1 2 3 4 5 6 7 8 9
| let f = document.createElement("form"); document.body.appendChild(f); let i = document.createElement("input"); i.type = "hidden"; f.appendChild(i); i.value = "5"; i.name = "price"; f.action = data.excel_url; f.submit();
|
组件被复用导致刷新问题
1
| <router-view :key="key"></router-view>
|
1 2 3 4 5 6 7
| computed: { key() { return this.$route.name !== undefined ? this.$route.name + new Date().getTime() : this.$route.name + new Date().getTime(); } }
|
CSS隐藏滚动条
CSS3的伪元素
.element::-webkit-scrollbar { width: 0 !important }
日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| export function DateFormat(time, format) { let t = new Date(time); let tf = function (i) { return (i < 10 ? '0' : '') + i }; return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (a) { switch (a) { case 'yyyy': return tf(t.getFullYear()); break; case 'MM': return tf(t.getMonth() + 1); break; case 'mm': return tf(t.getMinutes()); break; case 'dd': return tf(t.getDate()); break; case 'HH': return tf(t.getHours()); break; case 'ss': return tf(t.getSeconds()); break; } }) }
|
获取url参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| export function getQueryObject(url, decode = true) { if (decode) { url = decodeURIComponent(url) } url = decodeURIComponent(url) let search = url.substring(url.lastIndexOf("?") + 1); let obj = {}; let reg = /([^?&=]+)=([^?&=]*)/g; search.replace(reg, function (rs, $1, $2) { let name = decodeURIComponent($1); let val = decodeURIComponent($2); val = String(val); obj[name] = val; return rs; }); return obj; }
|
设置cookie
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import Cookies from "js-cookie";
export function Cookie(name, value = undefined) { if (value) { let inFifteenMinutes = new Date(new Date().getTime() + 20 * 60 * 60 * 1000); Cookies.set(name, value, { domain: 'xxx.com', expires: inFifteenMinutes }); Cookies.set(name, value, { domain: 'xxx.cn', expires: inFifteenMinutes }); } else if (value === '') { Cookies.remove(name, { domain: 'xxx.com' }); Cookies.remove(name, { domain: 'xxx.cn' }); } else { return Cookies.get(name); } }
|
跳转APP
1 2
| <a href="xxx://com.xxx">跳转APP</a> <a href="xxx://com.xxx.electronics/product?data=600042">参数跳转</a>
|
flex布局换行
1 2 3 4 5 6
| display: flex; flex-wrap: wrap; flex-flow: row wrap; justify-content: space-between; align-content: space-around; align-items: center;
|
IOS平滑滚动
1 2
| html, body, #app -webkit-overflow-scrolling touch
|
下载文件
1 2 3 4 5 6 7 8 9
| var f = document.createElement("form") document.body.appendChild(f) var i = document.createElement("input") i.type = "hidden" f.appendChild(i) i.value = "5" i.name = "price" f.action = downUrl f.submit();
|
移动端适配
如下配置,则px为多少就写多少,以750px设计稿为底
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| (function (doc, win) { let docEl = win.document.documentElement; let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'; let refreshRem = function () { let clientWidth = win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth; if (!clientWidth) return; let fz; let width = clientWidth; fz = 16 * width / 375; docEl.style.fontSize = fz + 'px'; };
if (!doc.addEventListener) return; win.addEventListener(resizeEvt, refreshRem, false); doc.addEventListener('DOMContentLoaded', refreshRem, false); refreshRem(); })(document, window);
|
vue.config.js
1 2 3 4 5 6 7 8 9 10 11 12 13
| css: { loaderOptions: { postcss: { plugins: [ require('postcss-plugin-px2rem')({ rootValue: 32, exclude: /(node_module)/, minPixelValue: 3 }), ] } } },
|
v-model
官网只给了一个Input的事例,但是自定义组件怎么用呢?
组件内实际上接受了一个value的值,传出去的事件为input
dialog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <template> <div class="page" v-show="value"> <button @click="close">关闭</button> </div> </template>
<script> export default { props: ['value'], methods: { close() { this.$emit('input', false) } }, } </script>
|
父组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <VDialog v-model="modal"></VDialog> // 下面的语法糖 <VDialog :value="modal" @input="modal = arguments[0]"></VDialog>
<script> import VDialog from '../components/dialog'; export default { components:{ VDialog }, data() { return { modal: false }; }, } </script>
|
npm yarn 代理设置
查看
yarn config list
yarn config get registry
淘宝源
npm config set registry https://registry.npm.taobao.org
yarn config set registry https://registry.npm.taobao.org
npm config set proxy http://127.0.0.1:10080
yarn config set proxy http://127.0.0.1:1080
npm config delete proxy
yarn config delete proxy
mac终端,当前有效
export http_proxy=http://proxyAddress:port
win CMD下
set HTTP_PROXY=http://127.0.0.1:10080
set HTTPS_PROXY=http://127.0.0.1:10080
power shell
设置代理
netsh winhttp set proxy http://127.0.0.1:10080
取消代理
netsh winhttp reset proxy http://127.0.0.1:10080
查看代理
netsh winhttp show proxy http://127.0.0.1:10080
移动端适配
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 100 * (clientWidth / 750) + 'px'; }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window);
|
vue.config.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| module.exports = { css: { loaderOptions: { postcss: { plugins: [ require('postcss-plugin-px2rem')({ rootValue: 100, exclude: /(node_module)/, minPixelValue: 3 }), ] } } } }
|
console
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| console.log('文字信息'); console.info('提示信息'); console.warn('警告信息'); console.error('错误信息');
console.group('组开头') console.groupCollapsed('可折叠的组') console.groupEnd('结束')
console.table(Array || Object);
console.assert(true, "不展示");
console.assert(false, "展示"); console.assert((() => false)(), "展示");
let add2 = (a, b) => add1(a, b) let add1 = (a, b) => add(a, b) let add = (a, b) => { console.trace("Add function") return a + b } add2(1, 1)
console.time("唯一性标示"); console.timeEnd("唯一性标示");
|
markdown
1 2 3 4 5 6 7
| ├── README.md ├── copy-static-assets.ts + ├── client-src + │ ├── components + │ │ └── Header.tsx + │ └── tsconfig.json └── tslint.json
|
electron & node-sass
.npmrc
1 2 3 4
| registry=https://registry.npm.taobao.org electron_mirror=https://npm.taobao.org/mirrors/electron/ phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/ sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
|
npm-link
库: yarn link
项目: yarn link 库名
每次项目 npm i 或者 yarn 后都需要重新 yarn link 一下