使用 localStorage 创建一个本地存储的 name/value 对,name=“lastname” value=“Smith”, 然后检索 “lastname” 的值,并插入到 id=“result” 的元素上:
// 存储
localStorage.setItem("lastname", "Smith");
// 检索
document.getElementById("result").innerHTML = localStorage.getItem("lastname");
// 删除数据
localStorage.removeItem("key");
对于模板中引入第三方UI框架的样式如何改写, 正确方式是写一个优先级高于原组件的全局样式来覆盖默认样式
// 需要去掉scoped
<style lang="stylus">
.repair-loading.van-toast {
width: 130px;
}
style>
参考文档
以上的代码会编译成:
.evaluation-swipe[data-v-0e092fdb] .van-swipe__indicator {
background-color: #000;
}
.van-radio {
/deep/ .van-radio__label {
width: 500px;
}
}
style标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素。那么他是怎么实现的呢,大家看一下编译前后的代码就明白了:
// 编译前
// 编译后
// 编译后
.parent[data-v-f3f3eg9] .child {
/* ... */
}
而对于less或者sass等预编译,是不支持>>>操作符的,可以使用/deep/来替换>>>操作符,例如:.parent /deep/ .child { /* … */ }
父:
<child ref="childMethod"></child>// 在父组件中给子组件指定ref
子:
method: {
test() {
alert(1)
}
}
// 在父组件里调用test即 this.$refs.childMethod.test()
https://www.jianshu.com/p/2ac9e40292ff
vue项目在进行微信公众号授权和jssdk配置的时候,在没有获取网页授权登录的时候,wx.config配置可以正常通过,但是当获取网页授权之后再去进行wx.config配置之后就会显示签名错误。多次测试发现,根据官方文档,发现有一个地方有点奇怪
正常情况下,如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
事实上,在vue项目中授权之后的跳转页面是这样的
http://xxx.xxx.mobi/?code=CODE&state=STATE#/aihome
// 这种情况下,再次刷新URL会导致wx.config的签名错误
我设置的redirect_uri是下面这样的
redirect_uri = http://xxx.xxx.mobi/#/aihome
按照官方文档应该在我设置的redirect_uri后面加上?code=CODE&state=STATE才对,也就是下面这样的
http://xxx.xxx.mobi/#/aihome?code=CODE&state=STATE
// 这种情况下,再次刷新wx.config签名可以顺利通过
为什么#号后面的路由会跑到url的最后面呢?也有位仁兄和我遇到一样的问题,点击查看
官方的解释是:将**#放到后面才是符合对应的url规则的**
根据这位前辈提供的解决方法,可行的
微信把#号后面的参数混淆了(位置错乱了,这在vue项目中是严重的,因为vue项目把#号后面的参数当做是路由,现在微信返回的路由错乱,肯定会出问题)
最后我决定静默把这个地址修复成我想要的url地址,并且页面不发生刷新(利用window.history.pushState方法,和vue的hash路由原理一样)
//把微信打乱的url地址静默修复
var changeUrl=`${window.location.protocol}//${window.location.host}${window.location.pathname}${window.location.hash}${window.location.search}`;
window.history.pushState({},0, changeUrl);
// 这样地址就会变成我们想要的地址了
http://xxx.xxx.mobi/#/aihome?code=CODE&state=STATE
这样还有一个好处,是不会增加一次页面的刷新
vue中computed计算属性无法直接进行传参
如果有传参数的需求,比如循环里想动态设置图片的名称可以使用闭包实现
<div v-once class="case_item" v-for="(item, index) in 3" :key="index">
<van-button class="tag_item" color="#394065" size="mini" mark type="primary">AI修复</van-button>
<div class="case_item_tag">
<van-image height="100%" radius="4" :src="smallImageBefore(index+1)" />
<van-image radius="4" height="100%" :src="smallImageAfter(index + 1)" />
</div>
</div>
。。。
computed: {
smallImageBefore() {
return function(index) {
return `../../../static/icon_small_before_${index}.png`
}
},
smallImageAfter() {
return function(index) {
return `../../../static/icon_small_after_${index}.png`
}
}
}
解决方案
资料1
资料2
资料3
资料
微信分享出去之后会在url后面加上下面参数
对于IOS系统会自动增加如下参数:
对于安卓系统会自动添加如下参数:
解决办法:就是前端传给后端用来签名的URL需要加上encodeURIComponent
在入口App.vue中添加代码
export default {
name: 'app',
mounted () {
const script = document.createElement('script')
script.src = 'https://s95.cnzz.com/z_stat.php?id=1111111111&web_id=1111111111'
script.language = 'JavaScript'
document.body.appendChild(script)
},
watch: {
'$route' () {
if (window._czc) {
let location = window.location
let contentUrl = location.pathname + location.hash
let refererUrl = '/'
window._czc.push(['_trackPageview', contentUrl, refererUrl])
}
}
}
}
const requireContext = require.context('./image', true, /^\.\/.*\.png$/);
let iconImages = {};
requireContext.keys().map(req => {
let iconName = req.split('./')[1];
iconName = iconName.split('.')[0];
const iconNameObj = {};
iconNameObj[iconName] = require(`./image/${iconName}.png`);
iconImages = {
...iconImages,
...iconNameObj,
};
return {
iconName: require(`./image/${iconName}.png`),
};
});
console.log('requireContext', requireContext, requireContext.keys(), iconImages);
此方法有三个参数,
加上
-webkit-touch-callout: none;
关于-webkit-touch-callout