VUE脚架项目搭建----APP项目的构建入口文件

通过vue-cli脚架的搭建,我们得到一个初始化的项目,我们删除对应不需要的文件,比如里面的logo,链接,hellWord文件,等到一个没有其他的框架,然后我们就要来搭建项目,怎么要搭建项目才可以方便维护和扩展,这里我们来讨论的是APP的目录,

思路就是几种

  1. 根据模块来划分,比如一般的APP都有首页,个人中心,产品,登录,等等模块,可以按照大模块来划分
  2. 根据功能来划分,比如登录里面包含注册,找回密码; 绑定信息里面包含修改,增加,删除,查看
  3. 根据导航来划分,比如侧边栏,tabbar栏,楼层栏等等
  4. 根据需求来划分,比如登录交互需求,产品交互需求,信息交互需求等等

这里我们按照常规的APP,tabbar页面->tabbar页面->对应的子页面这样的项目需求来构建项目

第一步:根据tabbar搭建对应的目录,这里我们就做两级目录,剩下的页面不创建目录,直接创建页面

 这里的tabbar有五个,所以我们对应的要在脚架的scr目录下的components创建对应的文件夹以及对应的VUE文件,以及一个入口文件,这个入口文件是做一下逻辑操作处理,比如校验token,判断跳转等待;

配置路由

import Vue from 'vue'
import Router from 'vue-router'
import home from '@/components/home/hone';
import index from '@/components/index/index';
import store from '@/components/store/store';
import ore from '@/components/ore/ore';
import mine from '@/components/mine/mine';
import transaction from '@/components/transaction/transaction';

Vue.use(Router)

export default new Router({
	routes: [{
			path: '/',
			name: 'index',
			component: index,
			children: [{
					path: 'home',
					name: 'home',
					component: home,
				},
				{
					path: 'store',
					name: 'store',
					component: store
				},
				{
					path: 'ore',
					name: 'ore',
					component: ore
				},
				{
					path: 'transaction',
					name: 'transaction',
					component: transaction
				},
				{
					path: 'mine',
					name: 'mine',
					component: mine
				}
			]
		},
	]
})

写个tabbar,填充,因为是APP,所以用到REM,这里我们配置一下 px2rem

老规矩 引入对应的依赖,这里的依赖是 

lib-flexible
px2rem-loader

//命令
npm i lib-flexible px2rem-loader --save-dev

找到目录下面的build->utils.js文件,添加下面三个

exports.cssLoaders = function(options) {
	options = options || {}

	const cssLoader = {
		loader: 'css-loader',
		options: {
			sourceMap: options.sourceMap,
			importLoaders: 1 //在css-loader前应用的loader的数目,默认为0.
			//如果不加这个  @import的外部css文件将不能正常转换
			//如果不行  请试着调大数字
			//更改后必须调大数字  否则无效
		}
	}

	const px2remLoader = {
		loader: 'px2rem-loader',
		options: {
			remUnit: 37.5 //设计稿的1/10 ,我们假设设计稿是350px
		}
	}

	const postcssLoader = {
		loader: 'postcss-loader',
		options: {
			sourceMap: options.sourceMap
		}
	}

	// generate loader string to be used with extract text plugin
	function generateLoaders(loader, loaderOptions) {
		// const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
		const loaders = options.usePostCSS ? [cssLoader, postcssLoader,] : [cssLoader,px2remLoader]
		if (loader) {
			loaders.push({
				loader: loader + '-loader',
				options: Object.assign({}, loaderOptions, {
					sourceMap: options.sourceMap
				})
			})
		}

		// Extract CSS when that option is specified
		// (which is the case during production build)
		if (options.extract) {
			return ExtractTextPlugin.extract({
				use: loaders,
				fallback: 'vue-style-loader'
			})
		} else {
			return ['vue-style-loader'].concat(loaders)
		}
	}

这里有个坑,因为项目同时引入了sass和px2rem,而项目会先编译sass,把里面的注释给过滤后,再通过px2rem进行转换,这就会造成原来不想要编译成rem的也会被编译成,/*no*/,/*px*/不生效,而有个写法让PX还是PX.就是不要编译的像素写成大写的,这样就不会被编译,比如px写成PX,不过这样的话,px2rem帮我们转换dpf模式的三套代码就也不生效了,暂时找不到方法,欢迎大家给思路或者有办法可以告诉我

回归正传,写首页的tabbar,配合路由,实现tabbar功能

<template>
	<div>
		<router-view></router-view>
		<div class="tab">
			<div class="tab-item" v-for="(item,index) in tab" :key="index">
				<router-link :to="item.url">
					<img class="icon" :src="item.icon" alt="" >
					<p>{{item.title}}</p>
				</router-link>
			</div>
		</div>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				tab: [
					{
						icon: require('../../assets/tabbar/home.png'),
						icon_select : require('../../assets/tabbar/home_selected.png'),
						title: '首页',
						url : '/home',
					},
					{
						icon: require('../../assets/tabbar/store.png'),
						icon_select : require('../../assets/tabbar/store_selected.png'),
						title: '商家',
						url : 'store',
					},
					{
						icon: require('../../assets/tabbar/ore.png'),
						icon_select : require('../../assets/tabbar/ore_selected.png'),
						title: '矿池',
						url : 'ore',
					},
					{
						icon: require('../../assets/tabbar/transaction.png'),
						icon_select : require('../../assets/tabbar/transaction_selected.png'),
						title: '交易',
						url : 'transaction',
					},
					{
						icon: require('../../assets/tabbar/mine.png'),
						icon_select : require('../../assets/tabbar/mine_selected.png'),
						title: '我的',
						url : 'mine',
					}
				]
			}
		}
	}
</script>

<style scoped lang="scss">
	.tab {
		width: 100vw;
		height: 98px;
		position: fixed;
		bottom: 0;
		right: 0;
		left: 0;
		display: flex;
		background: #143258;
		.tab-item {
			flex: 1;
			a{
				width: 100%;
				height: 100%;
				display: flex;
				justify-content: center;
				align-items: center;
				flex-direction: column;
				font-size: 20px;
				color: #fff;
				.icon{
					width: 33px;
					height: 33px;
					margin-bottom: 10px;
				}
			}
			
		}
	}
</style>

这里有个问题要注意 就是图片引入 如果写在data里面必须通过require才可以拿到图片 不然是加载不出来的

剩下的内容就自己去补充和填充,这里就不多介绍了

 

欢迎大家来补充和纠正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章