vue如何在一个工程里显示pc和手机端(适用多页面复杂项目)

vue通过设备判断方法来切换加载pc或h5的路由

一个工程做h5和pc切换展示小型项目适用,大型项目还是建议做两个工程,否则后期项目扩展,工程越来越大,会影响页面加载,
关于vue项目的优化,打包后包太大可以看我另一篇博文
vue项目优化,cdn和gz压缩

App.vue

<template>
	<div id="app">
		<router-view></router-view>
	</div>
</template>	
<script>
import store from '@/store'
import Router from 'vue-router'


mounted(){
		if(this.showBol()){
		
			console.log('pc')
			window.addEventListener('load',function(){
				if(store.state.router ==''){//刷新为当前页面
					Router.replace('/');
				}
			})
		}else{
			console.log('h5');
			Router.replace('/hIndex');
		}
	

},
methodes:{
		showBol(){
				var browser={
				    versions:function(){ 
				           var u = navigator.userAgent, app = navigator.appVersion; 
				           return {//移动终端浏览器版本信息 
				                trident: u.indexOf('Trident') > -1, //IE内核
				                presto: u.indexOf('Presto') > -1, //opera内核
				                webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
				                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
				                mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
				                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
				                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
				                iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
				                iPad: u.indexOf('iPad') > -1, //是否iPad  
				                webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
				                weixin: u.indexOf('MicroMessenger') > -1, //是否微信 
				                qq: u.match(/\sQQ/i) == " qq" //是否QQ
				            };
				         }(),
				         language:(navigator.browserLanguage || navigator.language).toLowerCase()
				} 
				 
				  if(browser.versions.mobile || browser.versions.ios || browser.versions.android || 
				  	browser.versions.iPhone || browser.versions.iPad){  	//h5
				   		return fals
				  }else{
				  		return true
					}
		}
}

</script>

router.js

const pcLatout = r =>require.ensuer([],() => r(require('./components/pcIndex/layout/layout.vue')),'pcLayout');
const h5Latout = r =>require.ensuer([],() => r(require('./components/h5Index/layout/layout.vue')),'h5Layout');
export defaule new Router({
	routes:[
	//pc路由
		{
			path:'/',
			component:pcLayout,
			children:[
				{
					path:"/",
					name:"pIndex",
					component:pIndex,
				},
				{
					path:"/papply",
					name:"papply",
					component:papply,
				},
				{
					path:"/pmerindex",
					name:"pmerindex",
					component:pmerindex,
				},
				{
					path:"/puserindex",
					name:"puserindex",
					component:puserindex,
					redirect:'puserInfo',
					children:[
							{
								path:"/puserInfo",
								name:"puserInfo",
								component:puserInfo,
								beforeEnter:(to,from,next)=>{
									if(store.state.token !== ''){
										console.log('用户已登录');
										next();
									}else{
									console.log('用户未登录');
									next({path:'/',query:{Rurl:to.fullPath}})
									}
								}
							},
					]
				},
				
			]
		},
		//h5路由
		{
			path:"/hindex",
			name:"hIndex",
			component:h5Layout,
			childrern:[
				{
					path:"/hIndex",
					name:"hIndex",
					component:hIndex
				},
				{
					path:"/happly",
					name:"happly",
					component:happly
				},
				{
					path:"/hmerchant",
					name:"hmerchant",
					component:hmerchant
				},
				{
					path:"/puserindex",
					name:"puserindex",
					component:puserindex,
					redirect:'puserInfo',
					children:[
							{
								path:"/puserInfo",
								name:"puserInfo",
								component:puserInfo,
								beforeEnter:(to,from,next)=>{
									if(store.state.token !== ''){
										console.log('用户已登录');
										next();
									}else{
									console.log('用户未登录');
									next({path:'/hindex',query:{Rurl:to.fullPath}})
									}
								}
							},
					]
				},
				
				
			]
		}
	]
})

store

const state = {
	router:'',
	token:''
}
const mutations = {
	setToken(state,value){
		state.token = value;
		sessionStorage.token = value
		
	},
	deleteToken(state){
		state.token = "";
		sessionStorage.removeItem('token')
	},
	setRouter(state,value){
		state.router= value;
	},
	deleteRouter(state){
		state.router= "";
	}
}

header.vue

watch:{
	$route(to,from){
		let router = to.path;
		sessionStorage.setItem('router',router);
		this.$store.commit('setRouter',sessionStorage.getItem('router'))
	}
},
mounter(){
	let router = this.$route.path;
	sessionStirage.setItem('router ',router);
	this.$store.commit('setRouter',sessionStirage.getItem('router '));
}
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Vue 可以通过响应式布局和 CSS 媒体查询来适配不同的设备,同时也可以使用第三方库如 Vant、Element UI 等来实现更好的适配效果。在开发时,可以使用 rem 或者 vw/vh 单位来实现页面元素的自适应。同时,也可以使用 Vue Router 来实现路由跳转和页面切换的效果。 ### 回答2: Vue适配PC手机端的方式有几种。 一种常见的方式是使用响应式设计。Vue提供了响应式布局的特性,可以根据设备的屏幕大小和分辨率自动调整页面布局和样式。通过使用Vue的响应式设计,我们可以根据不同的设备,例如PC和手机,来显示不同的布局和样式。这样用户在不同设备上访问网页时可以得到最优的浏览体验。 另一种方式是使用Vue的动态组件。动态组件可以根据设备的类型动态加载不同的组件。比如,在PC端加载一个PC端特有的组件,而在手机端加载一个手机端特有的组件。这样可以根据设备的特性来提供不同的功能和交互。 Vue还提供了一些vue-cli的插件,例如vue-router和vuex,可以帮助我们更方便地进行PC手机端的适配。通过使用这些插件,我们可以根据设备的特性来决定加载不同的路由和状态管理。 总之,Vue适配PC手机端的方式有很多种,可以根据具体的项目需求和实际情况选择合适的方式来进行适配。这样可以提供更好的用户体验,同时提高网页的可用性和易用性。 ### 回答3: Vue 是一种用于构建用户界面的开发框架,它可以用于适配 PC手机端。为了实现 PC手机端的适配,我们可以采取以下几种方式。 首先,可以使用响应式布局来实现 PC手机端的适配。Vue 提供了许多响应式布局的工具,例如使用栅格系统来划分页面布局,通过媒体查询设置不同的样式等。通过合理地设置元素的宽度、高度、布局和间距等属性,可以使页面不同尺寸的设备上均能良好地展示。 其次,可以通过使用 Vue Router 来实现 PC手机端的路由适配。Vue Router 是 Vue 的官方路由器,它可以帮助我们管理应用程序的路由。通过配置不同的路由规则和组件,可以根据设备的不同PC手机端提供不同页面和功能。例如,在 PC 端可以显示导航栏和侧边栏,而在手机端则可以隐藏这些元素以适应较小的屏幕。 另外,可以使用 Vue移动端框架来适配手机端Vue 提供了一些专门为移动端开发设计的框架,如 Vant、Mint UI 等。这些框架中包含了许多适用手机端的组件和样式,可以帮助我们快速地搭建出符合手机端界面设计标准的页面。 综上所述,通过响应式布局、Vue Router 和移动端框架的运用,我们可以很好地实现 VuePC手机端的适配。这些方法可以使得我们的应用程序在不同的设备上都能够具备良好的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值