总结vue项目中遇到的坑
金蝶云社区-honey缘木鱼
honey缘木鱼
84人赞赏了该文章 1,212次浏览 未经作者许可,禁止转载编辑于2019年01月02日 09:45:51

项目结束了,总要总结下学到了什么知识,在此期间遇到了什么问题,下面就是在项目期间遇到的各种问题总结,希望看过的人可以提前避免。


(1).H5页面在iOS网页中手机号码颜色改变

  H5页面在iOS网页中的数字被识别为电话号码,原因在于Safari浏览器的问题:解决该问题只需在head标签中添加如下代码即可解决。

 <metaname="format-detection"content="telephone=no">


(2).用webpack后,控制文本显示行数没有用

    我们通常设置文本换行的代码如下:

       overflow: hidden;

       text-overflow: ellipsis;

       display: -webkit-box;

       -webkit-line-clamp:1;

       -webkit-box-orient: vertica

   在本地设置是有效的,但是打包后发现不换行了,代码是没有错的,想着可能是打包的问题,最终还是找到了打包后-         webkit-box-orient样式会丢失。

    讲述上代码更改为:

    overflow: hidden;

    text-overflow: ellipsis;

    display: -webkit-box;

    -webkit-line-clamp:1;

    /*! autoprefixer: off */

    -webkit-box-orient: vertical;

    /* autoprefixer: on */

   注: -webkit-box-orient: vertical需要加上上文中的注释!


  (3).html标签中有多个空格

    设计图如下:

屏幕快照 2018-12-25 下午3.55.24.png

    本想着用 <div>参数           产地 功效</div>一行代码搞定,项目编译后,发现文字中间只有一个空格的间距,可明明设置很多空格呢?最后发现只能用标签符:“&nbsp;”&nbsp; 代表空格的转意字符,如果有多个空格我们就复制粘贴输入多次“&nbsp;”即可。

实现如图效果代码为:

<div>参数 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;产地 功效</div>


(4).判断是IOS ,安卓,还是微信浏览器

通过判断浏览器的userAgent,用正则来判断手机是否是IOS(苹果)和Android(安卓)客户端。

 var u =     navigator.userAgent;

 var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端

 var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

 ture 是  false 否

 微信浏览器打开判断方法:

   var ua = navigator.userAgent.toLowerCase();

   var isWeixin = ua.indexOf('micromessenger') != -1;

   if (isWeixin) {

        return true;

   }else{

        return false;

   }


(5).使用手机访问vue项目

   在做vue项目测试时,需要放在手机上调试,那么如何放在手机上调试呢?毋庸置疑,直接使用ip地址+端口号用手机去访问电脑上的vue项目。

   

40833CF1-73AD-4364-A30C-521A59320EA2.png


1. 把host中的改为“自己电脑的IP地址”

2.改为‘127.0.0.1’

3.改为‘localhost’


(6).vue返回上一页面时回到原先滚动的位置

    测试时发现有些用户习惯从一向上滑动后的页面进入下一页面后,返回上一页面时任要求在原来的位置,可是vue是轻量级的应用,从以页面跳转后,直接销毁当前页了,如何实现这一要求呢?官网提到用keep-alive不让其刷新。

 1).在App.vue中加入

     <template>

       <div id="app">

        <!--<router-view/>-->

         <!--页面返回不刷新-->

         <keep-alive>

            <router-view v-if="$route.meta.keepAlive"></router-view>

         </keep-alive>

         <router-view v-if="!$route.meta.keepAlive"></router-view>

        </div>

     </template>

  2).index.js页面  

    export default new Router({

       routes: [{

             path: '/',

             name: 'index',

             component: index,

              meta: {

                  keepAlive: true

             }

     },

这样在index.vue中,mounted方发只走一次,在浏览器上实现了返回原来滚动位置的目的。但是在手机上测试,发现没用,解决手机上实现目的的方法:

//在页面离开时记录滚动位置

beforeRouteLeave (to, from, next) {

    this.scrollTop = document.documentElement.scrollTop || document.body.scrollTop

    next()

  },

//进入该页面时,用之前保存的滚动位置赋值

beforeRouteEnter (to, from, next) {

    next(vm => {

      document.body.scrollTop = vm.scrollTop

    })

  },


(7).webpack打包后背景图片路径错误

background: url("../../assets/images/logo-index.png") no-repeat;被相对打包后变成了url(static/img/logo-index.2fbf2.png) no-repeat所以我们要保留css引用图片的正常路径,即:url(../../static/img/logo-index.2fbf2.png) no-repeat。那么就需要修改build文件夹下的utils.js代码,如图所示:

屏幕快照 2018-12-25 下午4.33.55.png

添加publicPath:'../../'这一行代码,这样不论是字体还是图片的引用问题都能解决。


(8).webpack打包后,css样式发生改变或不起作用

 用run dev build打包后,发现样式改变了,最终发现addAdress.vue和myAdress.vue中的有个类名是相同的,css样式被相互污染了。

<style  scoped></style>在style标签上添加scoped属性,就表示它的样式作用于当下的模块,样式私有化的目的就不会相互污染啊!为什么打包后会出现这样的结果呢!

原因:

1.使用了webpack2的语法规则不正确; webpack2要求必须写-loader;

2.可能是只写了css-loader,没有写style-loader;

3.顺序反了,必须写成 style-loader!css-loader;没写style-loader则build文件会生成,但你会发现页面中js不起作用;没写css-loader则会直接报错:’You may need an appropriate loader to handle this file type.’ 


   以上就是在项目中遇到的问题,如果错误请具体指出!


本篇独发金蝶云社区

赞 84