vue+element 中遇到的问题汇总

1.事件绑定未生效

使用修饰.native;在父组件中给子组件绑定一个原生的事件,就将子组件变成了普通的HTML标签,不加'. native'事件是无法触  发的

2.vuex不会永久存储,在刷新的时候会消失

vuex-persistedstate插件
 plugins: [createPersistedState({
	storage: window.sessionStorage,
  })],
  ![没有描述](https://img-blog.csdnimg.cn/20190820182316314.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0MzI3MA==,size_16,color_FFFFFF,t_70)

3.判断手机的类型

iphon() {
    // 判断是否是移动设备
    var ua = navigator.userAgent;
    var UA = {
      Android: function () { //安卓
        return ua.match(/Android/i) ? true : false;
      },
      BlackBerry: function () { //黑莓
        return ua.match(/BlackBerry/i) ? true : false;
      },
      IOS: function () { //IOS
        return ua.match(/iPhone|iPad|iPod/i) ? true : false;
      },

      isMobile: function () { //移动设备
        return UA.Android() || UA.BlackBerry() || UA.IOS();
      }
    }

    if (UA.isMobile()) {

      this.$router.push({
        path: '/h5'
      });
      document.getElementById('cnzz_stat_icon_1277898053').style.display = 'none'


    } else {
      this.$router.push({
        path: '/'
      });
    }

  }

4.判断手机本地是否有安装app

if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {
  // 判断useragent,当前设备为ios设备
  window.location.href = "XXX://"; // iOS端URL Schema
  window.setTimeout(function() {
      window.location = "https://itunes.apple.com/cn/app/XXX/"; // appstore下载地址
  },  2000);
  } else if (navigator.userAgent.match(/(android|Android);?/i)) {
      window.location.href = "scheme://XXXX"; /***打开app的协议,有安卓同事提供***/
      window.setTimeout(function(){
          window.location = "http://XXXXX/android.apk"; /***打开app的协议,有安卓同事提供***/
      },2000);
  }
  ---------------------------------或者----------------------------------------
   if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {
       var loadDateTime = new Date();
        window.location = "com.imlianka.lkapp"; //schema链接或者universal link
        window.setTimeout(function () { //如果没有安装app,便会执行setTimeout跳转下载页
            var timeOutDateTime = new Date();
            if (timeOutDateTime - loadDateTime < 5000) {
                window.location =
                    "https://itunes.apple.com/cn/app/脸咔/id1469555142?mt=8"; //ios下载地址  
            } else {
                window.close();
            }
        }, 500);

    } else if (navigator.userAgent.match(/android/i)) {
        var state = null;
        try {
            window.location = 'android://lianka.h5/open'; //schema链接或者universal link
            window.setTimeout(function () {
                window.location = "http://www.baidu.com"; //android下载地址  
            }, 500);
        } catch (e) {}
    }

5.路由跳转的时候不存历史记录,解决页面重定向后能退回 定向前的页面

<router-link to="路由地址" replace//不添加历史记录>

this.$router.push({
	path:"路由地址",
	replace:true//路由跳转不产生历史记录
})

this.$router.replace({
	path:"路由地址"
})

---------原生---------------
window.location.replace("地址")

6.动态样式和class

:class="{'class-a':isA,'class-b':isB}"
:style="{ color: activeColor, fontSize: fontSize + 'px' }"

7.h5不兼容position:fixed达到滑动时切换浮动位置

	使用'fixed'和'static'做兼容

8.地址栏参数获取

第一种:参数只能是英文的。
	//获取地址栏参数//只能是英文参数
	function GetQueryString(name) {
	    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
	    var r = window.location.search.substr(1).match(reg);
	    if (r != null) return unescape(r[2]); return null;
	}
	
第二种:参数可以是中文也可以是英文
	//获取地址栏参数//可以是中文参数
	function getUrlParam(key) {
	    // 获取参数
	    var url = window.location.search;
	    // 正则筛选地址栏
	    var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
	    // 匹配目标参数
	    var result = url.substr(1).match(reg);
	    //返回参数值
	    return result ? decodeURIComponent(result[2]) : null;
	}

9.图片百分比宽高相等设置

<div class="image-header">
<img src="demo.jpg">
</div>
.image-header{
	position:relative
	width:100%
	height:0
	padding-top:100%
}

.image-header img{
	position:absolute
	top:0
	left:0
	width:100%
	height:100%
}

10.页面滚动监听

//监听页面滚动事件
window.addEventListener('scroll', this.appScroll)
//注意:如果由于自己的vue中的样式导致监听不到,可以尝试监听body或者'#app-root'的滚动事件
--------------------------------------------------------------------------------
//获取元素到顶部的距离
//浏览器兼容
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop

11.oss后端签名直传

upload(e){
   // 先准备好 oss 服务器需要的内容
   const photo = window.URL.createObjectURL(e.target.files[0])  // 获取图片对象
   const photoName = photo.name  // 原图片的名称
   const key = "photoNameOss"  // 存储到oss的图片名称 自己定,必须确保唯一性,不然会覆盖oss中原有的文件
   const policy = "policy"  // 服务器端同事调oss的API,通过接口返回给前端的 policy
   const policy = "OSSAccessKeyId"  // 服务器端同事调oss的API,通过接口返回给前端的 OSSAccessKeyId
   const policy = "callback"  // 服务器端同事调oss的API,通过接口返回给前端的 callback。这个是需要 oss 触发这个回调来通知服务器操作结果。
   const policy = "signature"  // 服务器端同事调oss的API,通过接口返回给前端的 signature。这个就是签名,最关键的。
   const url = `http://${自己的域名}.oss-cn-beijing.aliyuncs.com`
   
   // biu一下,提交给oss
   let param = new FormData(); 
   param.append('name', `${photoName}`)
   param.append('key', `${key}`)
   param.append('policy', `${policy}`)
   param.append('OSSAccessKeyId', `${OSSAccessKeyId}`)
   param.append('success_action_status', 200)  // 不要问为什么,照做
   param.append('callback', `${callback}`)
   param.append('signature', `${signature}`) 
   param.append('file', photo, photoName); // 这个**切记**一定要放到最后去 append ,不然阿里云会一直报 key 的错误
   axios.post(url, param)
       .then(response => {
           console.log("response == ", response)
       })
       .catch((err) => {
           console.log("err == ", err)
       })
 }

12.git公钥生成

ssh-keygen -t rsa -C “your_email@example.com”
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190907130252242.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0MzI3MA==,size_16,color_FFFFFF,t_70)

13.图片与base64相互转换

将图片转换为Base64
function getImgToBase64(url,callback){
  var canvas = document.createElement('canvas'),
    ctx = canvas.getContext('2d'),
    img = new Image;
  img.crossOrigin = 'Anonymous';
  img.onload = function(){
    canvas.height = img.height;
    canvas.width = img.width;
    ctx.drawImage(img,0,0);
    var dataURL = canvas.toDataURL('image/png');
    callback(dataURL);
    canvas = null;
  };
  img.src = url;

将base64转换为file类型
 function dataURLtoFile(dataurl, filename) {
        var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
            bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
        while(n--){
            u8arr[n] = bstr.charCodeAt(n);
        }
        return new File([u8arr], filename, {type:mime});
    }
    
可以将图片转换为base64
getImgToBase64('img/test.png',function(data){
   var myFile = dataURLtoFile(data,'testimgtestimgtestimg');
   console.log(myFile);
});
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值