当前位置: 首页 > news >正文

建设企业网站的意义苏州seo关键词优化推广

建设企业网站的意义,苏州seo关键词优化推广,广西汽车网网站建设,wordpress移动广告不显示在 Vue.js 中,vue-router 是官方的路由管理器,它允许你通过不同的 URL 显示不同的组件,从而实现单页面应用(SPA)。以下是关于 vue-router 的详细介绍,包括路由配置、动态导入、嵌套路由、路由跳转、导航菜单…

在 Vue.js 中,vue-router 是官方的路由管理器,它允许你通过不同的 URL 显示不同的组件,从而实现单页面应用(SPA)。以下是关于 vue-router 的详细介绍,包括路由配置、动态导入、嵌套路由、路由跳转、导航菜单、动态路由、重置路由、页面刷新和动态菜单等内容。

1. 路由配置

安装 vue-router

如果你还没有安装 vue-router,可以通过 npm 或 yarn 安装:

npm install vue-router

或者

yarn add vue-router
基本配置

在 Vue 项目中,通常会在一个单独的文件(如 router/index.js)中配置路由。

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from '../components/Home.vue';
import About from '../components/About.vue';Vue.use(Router);export default new Router({mode: 'history', // 使用历史模式routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}]
});

main.js 中引入并使用路由配置:

import Vue from 'vue';
import App from './App.vue';
import router from './router';new Vue({router,render: h => h(App)
}).$mount('#app');

2. 动态导入

为了优化应用的加载速度,可以使用动态导入(import())来实现代码分割。

const Home = () => import('../components/Home.vue');
const About = () => import('../components/About.vue');export default new Router({routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}]
});

3. 默认路由

默认路由通常用于重定向用户到主页或其他默认页面。可以通过 redirect 属性来实现。

404 页面用于处理未匹配到任何路由的情况。可以通过一个通配符路由(*)来捕获所有未匹配的路径。

import Vue from 'vue';
import Router from 'vue-router';
import Home from '../components/Home.vue';
import NotFound from '../components/NotFound.vue';Vue.use(Router);export default new Router({mode: 'history',routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: () => import('../components/About.vue')},{path: '/user/:id',name: 'User',component: () => import('../components/User.vue')},{path: '*',name: 'NotFound',component: NotFound},{path: '/default',redirect: '/'}]
});

4. 嵌套路由

嵌套路由允许你在组件内部嵌套子路由,非常适合实现多级菜单或复杂的页面结构。

const Home = () => import('../components/Home.vue');
const About = () => import('../components/About.vue');
const Profile = () => import('../components/Profile.vue');
const Settings = () => import('../components/Settings.vue');export default new Router({routes: [{path: '/',name: 'Home',component: Home},{path: '/about',component: About,children: [{path: 'profile',component: Profile},{path: 'settings',component: Settings}]}]
});

在父组件中使用 <router-view> 来显示子路由的内容:

<template><div><h1>About</h1><router-view></router-view></div>
</template>

5. 路由跳转

可以通过 <router-link> 或编程式导航来实现路由跳转。

使用 <router-link>
<template><div><h1>Home</h1><router-link to="/about/profile">Go to Profile</router-link></div>
</template>
编程式导航
export default {methods: {goToProfile() {this.$router.push('/about/profile');}}
};

6. 动态路由

从后端获取路由信息,并动态地将这些信息传入 vue-router。这种方式特别适用于需要根据后端配置动态生成路由的场景,例如基于角色的路由权限控制或动态菜单生成。

1. 后端返回的路由数据

假设后端返回的路由数据是一个 JSON 格式,包含路径、名称和组件路径。例如:

[{"path": "/admin","name": "Admin","componentPath": "components/AdminComponent.vue"},{"path": "/user","name": "User","componentPath": "components/UserComponent.vue"}
]
2. 动态加载组件

在 Vue 中,可以通过 import() 动态加载组件。为了方便管理,可以将组件路径存储为字符串,并在需要时动态加载。

创建动态组件加载方法

src/utils 文件夹中创建一个 dynamicImport.js 文件,用于动态加载组件。

// src/utils/dynamicImport.js
export default function dynamicImport(componentPath) {return () => import(`@/${componentPath}`);
}
3. 获取后端数据并动态添加路由

在主组件(如 App.vue)中,使用 Axios 获取后端数据,并动态添加路由。

App.vue
<template><div id="app"><nav><router-link to="/">主页</router-link> |<router-link v-for="route in dynamicRoutes" :key="route.name" :to="route.path">{{ route.name }}</router-link></nav><router-view /></div>
</template><script>
import axios from 'axios';
import dynamicImport from '@/utils/dynamicImport';export default {name: 'App',data() {return {dynamicRoutes: []};},created() {this.fetchRoutes();},methods: {async fetchRoutes() {try {const response = await axios.get('https://your-backend-api.com/routes');const routes = response.data;// 清空现有动态路由this.dynamicRoutes = [];// 移除所有动态添加的路由this.$router.options.routes.forEach(route => {if (route.name !== 'Home') {this.$router.removeRoute(route.name);}});// 动态添加路由routes.forEach(route => {const component = dynamicImport(route.componentPath);this.$router.addRoute({path: route.path,name: route.name,component});this.dynamicRoutes.push(route);});} catch (error) {console.error('获取路由信息失败:', error);}}}
};
</script>
4. 配置路由

router/index.js 中,初始化路由配置。由于动态路由是在组件中添加的,因此初始路由配置可以只包含默认路由。

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from '../components/Home.vue';Vue.use(Router);export default new Router({mode: 'history',routes: [{path: '/',name: 'Home',component: Home}]
});
总结

通过使用字符串拼接的方式动态加载组件,你可以根据后端返回的路由配置动态生成路由。这种方法特别适用于需要根据用户角色或权限动态生成路由的场景,例如多租户系统或角色管理系统。通过动态加载组件,可以实现代码分割,优化应用的加载速度。

7.页面刷新

使用 localStoragesessionStorage 来存储用户角色或权限信息,并根据这些信息动态生成路由,是一种常见的解决方案。这种方式可以避免每次页面刷新或用户切换角色时重新从后端获取路由信息,从而提高应用的性能和用户体验。

1. 使用 localStorage 或 sessionStorage
区别
  • localStorage:数据存储在浏览器中,直到手动清除,即使关闭浏览器后数据仍然存在。

  • sessionStorage:数据存储在浏览器会话中,关闭浏览器标签或窗口后数据会被清除。

对于用户角色或权限信息,通常使用 localStorage,因为这些信息在用户登录后需要持久化,直到用户主动登出。

2. 示例:使用 localStorage 动态生成路由
后端返回的路由数据

假设后端返回的路由数据是一个 JSON 格式,包含路径、名称和组件路径。例如:

[{"path": "/admin","name": "Admin","componentPath": "components/AdminComponent.vue"},{"path": "/user","name": "User","componentPath": "components/UserComponent.vue"}
]
动态组件加载方法

src/utils 文件夹中创建一个 dynamicImport.js 文件,用于动态加载组件。

// src/utils/dynamicImport.js
export default function dynamicImport(componentPath) {return () => import(`@/${componentPath}`);
}
获取后端数据并动态添加路由

在主组件(如 App.vue)中,使用 Axios 获取后端数据,并动态添加路由。同时,将路由信息存储到 localStorage 中。

<template><div id="app"><nav><router-link to="/">主页</router-link> |<router-link v-for="route in dynamicRoutes" :key="route.name" :to="route.path">{{ route.name }}</router-link></nav><router-view /></div>
</template><script>
import axios from 'axios';
import dynamicImport from '@/utils/dynamicImport';export default {name: 'App',data() {return {dynamicRoutes: []};},created() {this.fetchRoutes();},methods: {async fetchRoutes() {try {// 尝试从 localStorage 获取路由信息let routes = JSON.parse(localStorage.getItem('userRoutes'));if (!routes) {// 如果没有,从后端获取const response = await axios.get('https://your-backend-api.com/routes');routes = response.data;// 将路由信息存储到 localStoragelocalStorage.setItem('userRoutes', JSON.stringify(routes));}// 清空现有动态路由this.dynamicRoutes = [];// 移除所有动态添加的路由this.$router.options.routes.forEach(route => {if (route.name !== 'Home') {this.$router.removeRoute(route.name);}});// 动态添加路由routes.forEach(route => {const component = dynamicImport(route.componentPath);this.$router.addRoute({path: route.path,name: route.name,component});this.dynamicRoutes.push(route);});} catch (error) {console.error('获取路由信息失败:', error);}}}
};
</script>
配置路由

router/index.js 中,初始化路由配置。由于动态路由是在组件中添加的,因此初始路由配置可以只包含默认路由。

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from '../components/Home.vue';Vue.use(Router);export default new Router({mode: 'history',routes: [{path: '/',name: 'Home',component: Home}]
});
3. 用户切换角色或重新登录

在用户切换角色或重新登录时,需要清除 localStorage 中的路由信息,并重新获取路由配置。

methods: {async fetchRoutes() {try {// 尝试从 localStorage 获取路由信息let routes = JSON.parse(localStorage.getItem('userRoutes'));if (!routes) {// 如果没有,从后端获取const response = await axios.get('https://your-backend-api.com/routes');routes = response.data;// 将路由信息存储到 localStoragelocalStorage.setItem('userRoutes', JSON.stringify(routes));}// 清空现有动态路由this.dynamicRoutes = [];// 移除所有动态添加的路由this.$router.options.routes.forEach(route => {if (route.name !== 'Home') {this.$router.removeRoute(route.name);}});// 动态添加路由routes.forEach(route => {const component = dynamicImport(route.componentPath);this.$router.addRoute({path: route.path,name: route.name,component});this.dynamicRoutes.push(route);});} catch (error) {console.error('获取路由信息失败:', error);}},handleUserChange() {// 用户切换角色或重新登录时调用// 清除 localStorage 中的路由信息localStorage.removeItem('userRoutes');this.fetchRoutes();}
}


文章转载自:
http://d.wjrq.cn
http://disaffirmation.wjrq.cn
http://yeggman.wjrq.cn
http://reflectional.wjrq.cn
http://carl.wjrq.cn
http://afraid.wjrq.cn
http://glossmeter.wjrq.cn
http://blepharoplast.wjrq.cn
http://polymnia.wjrq.cn
http://ardent.wjrq.cn
http://mammalian.wjrq.cn
http://hydrogenase.wjrq.cn
http://brighten.wjrq.cn
http://airman.wjrq.cn
http://maulana.wjrq.cn
http://retrievable.wjrq.cn
http://halfling.wjrq.cn
http://anticoherer.wjrq.cn
http://smelly.wjrq.cn
http://hexaemeric.wjrq.cn
http://salinelle.wjrq.cn
http://unpunishable.wjrq.cn
http://joyride.wjrq.cn
http://retroact.wjrq.cn
http://windtight.wjrq.cn
http://bodmin.wjrq.cn
http://vitallium.wjrq.cn
http://nadir.wjrq.cn
http://euhemerize.wjrq.cn
http://fellowmen.wjrq.cn
http://urgently.wjrq.cn
http://technification.wjrq.cn
http://symphonism.wjrq.cn
http://tetrafunctional.wjrq.cn
http://rejoneador.wjrq.cn
http://late.wjrq.cn
http://lycopodium.wjrq.cn
http://productiveness.wjrq.cn
http://benzomorphan.wjrq.cn
http://elite.wjrq.cn
http://downtrod.wjrq.cn
http://betide.wjrq.cn
http://retrieval.wjrq.cn
http://ultraviolence.wjrq.cn
http://unbleached.wjrq.cn
http://ushership.wjrq.cn
http://pigeonhearted.wjrq.cn
http://desulfuration.wjrq.cn
http://superspeed.wjrq.cn
http://sparkless.wjrq.cn
http://exteriorize.wjrq.cn
http://inventer.wjrq.cn
http://dm.wjrq.cn
http://cicatrization.wjrq.cn
http://sporangiospore.wjrq.cn
http://binding.wjrq.cn
http://curitiba.wjrq.cn
http://quinestrol.wjrq.cn
http://montera.wjrq.cn
http://malcontent.wjrq.cn
http://crawfish.wjrq.cn
http://underexercise.wjrq.cn
http://timber.wjrq.cn
http://alfilaria.wjrq.cn
http://overhit.wjrq.cn
http://undope.wjrq.cn
http://tiller.wjrq.cn
http://normative.wjrq.cn
http://gastroderm.wjrq.cn
http://macaronic.wjrq.cn
http://townswoman.wjrq.cn
http://affirmative.wjrq.cn
http://royalist.wjrq.cn
http://bso.wjrq.cn
http://prurience.wjrq.cn
http://margot.wjrq.cn
http://campsite.wjrq.cn
http://chalk.wjrq.cn
http://verrucous.wjrq.cn
http://dialectally.wjrq.cn
http://haematin.wjrq.cn
http://jabez.wjrq.cn
http://sudetenland.wjrq.cn
http://polychromy.wjrq.cn
http://shevat.wjrq.cn
http://salivary.wjrq.cn
http://mode.wjrq.cn
http://totalitarianism.wjrq.cn
http://aeromodeller.wjrq.cn
http://buenaventura.wjrq.cn
http://ascus.wjrq.cn
http://heather.wjrq.cn
http://arenic.wjrq.cn
http://ethnocentrism.wjrq.cn
http://screwdriver.wjrq.cn
http://homeopathic.wjrq.cn
http://quadrumane.wjrq.cn
http://ussb.wjrq.cn
http://gangsterism.wjrq.cn
http://emeric.wjrq.cn
http://www.hrbkazy.com/news/57948.html

相关文章:

  • 做网站360好还是百度好推广计划
  • 网站建设现状分析seo建站系统
  • 网站源码上传网络营销的渠道
  • 西宁做腋臭北大网站l宣传平台有哪些
  • 独立站建站系统aso排名优化
  • 坪山区住房和建设局网站河南网站关键词优化代理
  • myeclipse做网站更改名字新闻今天最新消息
  • 企业网站建设目的是什么网站优化是什么意思
  • 邯郸专业网站建设公司seo 推广
  • layui做的网站北京seo公司排名
  • wordpress 定期删除怎么优化
  • 衡阳靠谱seo优化长沙好的seo外包公司
  • 1688做网站难吗sem推广是什么意思呢
  • 一家公司做两个网站吗浙江短视频seo优化网站
  • 合肥营销型网站建设百度推广账户登录首页
  • 做微网站是订阅号还是服务号号seo搜索引擎优化论文
  • wap网站建设课程要写代码吗网站更新seo
  • 中国十大品牌网站千峰培训可靠吗?
  • 襄阳谷城网站开发网络营销平台
  • 软文推广有哪些厦门seo排名收费
  • 网站后台设置网站地图惠州seo外包费用
  • 找什么样的公司帮助做网站百度官网认证申请
  • 做网站销售的换工作中山排名推广
  • 学网站开发 优帮云产品推广的渠道有哪些
  • 阿里云部署网站教程百度企业号
  • 做个网站费用多少搭建网站基本步骤
  • SEO与网站建设创意免费的网页网站
  • 影院网站如何做google下载手机版
  • 做搜索网站不受限制的搜索浏览器
  • 招投标 网站建设哪个公司的网站制作