vue开发商城问题记录

项目用到的技术:vue + vue-router + vuex + axios + vant-ui + webpack + sass

项目从3月中旬开始搭建,当时需求都没明确,这种情况下只能边开发边定需求,这感觉mmmmp...大家懂的,吐槽的话就不多说了。好在在团队的辛勤加班下,终于一个月的时间把一期完成了(搜索、收藏、转发、积分、秒杀(部分功能)、购物、售后、优惠券、签到、评价、资讯、订单等),达到了上线要求(也不知道这个时间在大家眼里是长了还是短了),在这里记录一下目前遇到的问题。

点赞:后端的配合

由于项目从开始搭建到一期结束,前端部分几乎都是自己完成的(只有签到功能和用户信息编辑功能交给新同事做),同期的后端有3人,所以前端部分的压力还是挺大的(主要是时间问题)。不过很庆幸,娇气点说,后端很迁就自己,大部分的数据都是根据前端需要的结构直接返回的,几乎不需要怎么处理,这样就大大减少了前端的开发压力和时间。

vant-ui使用问题记录

1.van-address-edit使用

使用没什么问题,给对应的参数就好,area-list入口,要记得引入,完整的area.json

2.van-address-edit地址回显问题

<van-address-edit
    :area-list="areaList"
    :address-info="addressInfo"
    show-set-default
    @save="handleSave"
    save-button-text="保存并使用"
/>

addressInfo: {
    id: '1',
    name: '1111',
    tel: '13562345785',
    province:'天津市',
    city:'天津市',
    county:'和平区',
    areaCode:'120101',
    addressDetail: '1号',
    isDefault: true,
},//收件人信息初始值,其中province city county是中文字符串,areaCode是对应的code,而且一定要写这个参数,不然地址传进去是无效的

3.按照api引入vant的css报错

其实这个问题自己也在纠结应不应该写出来,因为一般情况下,大家都会选择按需引入,自己问过同期使用vant-ui的朋友,他按需引入是没有问题的,但是自己的项目因为用到的组件比较多,所以没有按需引入,而是导入所以组件。按照官方的api是这样写的

import Vue from 'vue';
import Vant from 'vant';
import 'vant/lib/index.css';

Vue.use(Vant);

而当自己这样引入的时候却报css文件找不到的错误,但是按照路径打开node_modules下vant-lib是有index.css文件存在的。

4.真的,vant-ui的api该找个时间好好完善下,挺多地方说的不够详细,包括给出的例子,另外api页面没有搜索功能,在线编辑功能,不太方便,不知道后期会不会加上。

微信分享问题:

注意:history模式。

前端最主要的问题是传当前页的url给后端进行验证,而单纯用let url = encodeURI(window.location.href.split('#')[0])来获取当前页的url,安卓机是没问题的,但是ios就不行,因为ios只能获取到进入商城第一个页面的url,所以导致验证不通过。这个问题说实话,是比较头疼的,网上查找了好多方法都没有用。
目前用的解决方案是router刷新 + vuex,这里做个记录。
main.js

router.beforeEach((to, from, next) =>{
  //默认进到页面置顶
  window.scrollTo(0, 0);
  /*解决ios分享验证及分享打开首页问题*/
  if (to.path !== location.pathname) {
     此处不可使用location.replace
    location.assign(to.fullPath)
  } else {
    next()
  }
})

当前页

//引入vuex
import { mapGetters } from 'vuex';
computed: mapGetters([
  'url'
]),

let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
let url = '';
if(isAndroid){
  url = this.$route.fullPath;
}
if(isIOS){
  if(!this.url){
    this.$store.dispatch('setEntryUrl',this.$route.fullPath);
  }
  url = this.url;
}
//如果当前页url是https://www.test.com/index/web/test,那么到这步url的值是/index/web/test,需要自己拼接域名
let domain = document.domain;
url = 'https://' + domain + url

vuex

//modules--url.js
import {
    SET_URL
} from '../mutation-types'

const state = {
    url: ''
};

const getters = {
    url: (state)=>state.url
};

const mutations = {
    [SET_URL](state, data){
        state.url = data;
    }
};

export default {
    state,
    getters,
    mutations
}

//index.js

import Vue from 'vue'
import Vuex from 'vuex';

import * as actions from './actions'

Vue.use(Vuex);

const store = new Vuex.Store({
    actions,
    modules: {
        url:{
            state : {
                url: ''
            },
            getters : {
                url: (state)=>state.url
            },
            mutations : {
                ['GET_URL'](state, data){
                    state.url = data;
                }
            }
        }
    }
});
export default store;

//active.js
export const setEntryUrl = ({ commit }, data) => {
    commit(types.SET_URL, data);
};

//mutation-types.js
export const SET_URL = 'SET_URL';

//store.js
import Vue from 'vue';
import Vuex from 'vuex';

import * as actions from './actions'

import url from './modules/url';

Vue.use(Vuex);

export default new Vuex.Store({
  actions,
  modules: {
    url
  }
});
编辑器编辑的内容,使用v-html显示,css无法修改

原因:不详

解决方法:sytle标签把scoped去掉(同时,网上查到可以用>>> 方法指定到下层,但是尝试没用,所以只作为记录)

页面部署服务器后刷新页面报404

原因:服务器配置问题

解决方法:服务器配置相关信息就好了,另外,前端的router要根据后端路由层级进行配置,例如:本项目后端路由有两个层级,那么项目中前端的路由也要跟着两个层级(/index/web/cart,类似这样的,其中web层级可以随便命名,但是要统一)

项目打包后提示静态资源404(即css,js文件加载不到)
项目目录

原因:后端路径只能认到根目录,而前端打包的文件都在dist文件夹内,里面还有二级目录,后端无法进入,导致获取不到里面的文件,从而报错

解决方法:进入config--index.js文件,修改buildassetsPublicPath

  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    /*此处原先为 /,指定到根目录,加了dist/后就可以指定到dist文件夹了,注意,后面一定要 / */
    assetsPublicPath: '/dist/',

    /**
     * Source Maps
     */

    productionSourceMap: false,
    // https://webpack.js.org/configuration/devtool/#production
    devtool: '#source-map',

    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],

    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report
  }
}
ios10打开白屏

解决方法:
1.进入build--webpack.prod.conf.js文件

2.在UglifyJsPlugin的定义里添加关于mangle的选项,使它变成下面这个样子:

new UglifyJsPlugin({
      uglifyOptions: {
        compress: {
          warnings: false
        },
        //这里是新加的
        mangle: {
          safari10: true
        }
      },
      sourceMap: config.build.productionSourceMap,
      parallel: true
    }),
node-sass在npm引入所有包后仍报undefined或找不到的错误

解决方法:npm rebuild node-sass

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,490评论 1 45
  • 本文章是我最近在公司的一场内部分享的内容。我有个习惯就是每次分享都会先将要分享的内容写成文章。所以这个文集也是用来...
    Awey阅读 9,452评论 4 67
  • 我来 TalkingData 实习已经六个月了。在这六个月期间,我独立完成了三个前端 SPA 项目,从 Vue 1...
    云之外阅读 5,977评论 1 18
  • 无论你在哪里,从事着怎样的职业,工作第一年还是第几年。 或是你在校园。 这篇文字,与你们共勉。——写在前面 一、用...
    柯南君说阅读 283评论 0 1
  • 其一 花下琴壶有,黄莺自在吟。 千飞青草浅,百啭凤林深。 体小藏丛蔚,天高出并禽。 樊笼无此乐,怎得碧云心。 其二...
    竹林听溪_子腾阅读 830评论 6 29