GVKun编程网logo

如何在vue路由器中“ if-else”组件?(vue路由beforeeach)

26

关于如何在vue路由器中“if-else”组件?和vue路由beforeeach的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于javascript-如何在Vuetify组件中以编程方式设

关于如何在vue路由器中“ if-else”组件?vue路由beforeeach的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于javascript-如何在Vuetify组件中以编程方式设置组件属性、laravel – 如何在vue js中将数据从一个组件传递到另一个组件?、Markdown文件居然也可以直接作为Vue路由组件?、react router @4 和 vue路由 详解(一)vue路由基础和使用等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

如何在vue路由器中“ if-else”组件?(vue路由beforeeach)

如何在vue路由器中“ if-else”组件?(vue路由beforeeach)

如何解决如何在vue路由器中“ if-else”组件??

我目前正在将vue与vue-router一起使用。而且我有一个小问题要解决,也许您可​​以帮忙。

我想要的结果是,登录后,我想使用 Auth.vue 作为父级,并使用 Home.vue 作为其内容。而且,如果用户未经身份验证/已注销,则将使用 Guest.vue Welcome.vue 作为其内容。我希望他们都使用相同的路径/

现在下面的代码在登录后可以正常工作,问题出在我注销后,即使user.isLoggedIn()为假,它仍然使用 Auth.vue Home。 vue

任何建议如何实现这一目标?


现在这是我的 router.js

{
    path: ''/login'',name: ''login'',component:  () => import(''./Login''),},{
    path: ''/'',component:  () => {
        if(user.isLoggedIn()) { 
            return import(''./views/layouts/Auth'');
        }else {
            return import(''./views/layouts/Guest'');
        }
    },children: [
        {
            path: ''/'',name: ''home'',component:  () => {
                if(user.isLoggedIn()) {
                    return import(''./views/Home'');
                }else {
                    return import(''./views/Welcome'');
                }
            },],

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

javascript-如何在Vuetify组件中以编程方式设置组件属性

javascript-如何在Vuetify组件中以编程方式设置组件属性

我有一个定义的复选框组件,如下所示:

let checkBox = this.$createElement(VCheckBox,{
    props: {
        hideDetails: true
    }
});

在我的代码中,我可以获得对该组件的引用.换句话说,我可以访问此复选框变量.我想要的是以编程方式设置属性.按属性,我指的是组件的这一部分:

props: {
    hideDetails: true
}

我想要的是将不确定性设置为true.就像是:

checkBox.setProperty('indeterminate',true);

但我无法在文档中找到与我的问题有关的任何内容.那么,我该如何实现呢?

最佳答案
您可以在数据范围内创建动态变量:

data: function() {
  return {
    stateDetails: true
  };
}

然后在道具中使用它:

props: {
  hideDetails: this.stateDetails
}

现在您可以像这样更改值:

this.stateDetails = true / false

laravel – 如何在vue js中将数据从一个组件传递到另一个组件?

laravel – 如何在vue js中将数据从一个组件传递到另一个组件?

我正在学习vue laravel.我想将值从一个组件传递到其他组件?我已经使用vue路由器进行路由.

这是第一个和第二个组件的代码.
SelectPerson.vue

<template>
    ......
      <div>
        <input type="number"name="numberOfPersons" placeholder="Enter number of persons here" **v-model="inputPersons"**>
        <br>
        **<SelectTimeSlot v-bind:numberOfPersons="inputPersons"></SelectTimeSlot>**
      </div>
      <div>
        <buttonv-on:click="selectTimeSlots">Next</button>
      </div>
    ......
</template>
<script>
import SelectTimeSlot from './SelectTimeSlot.vue'
  export default{
    props:['numberOfPersons'],data(){
        return{
          **inputPersons:0**
        }
    },methods:{
      selectTimeSlots(){
        this.$router.push({name:'SelectTimeSlot'});
      }
    }
  }
</script>

第二部分
SelectTimeSlot.vue

<template>
<h5>Welcome,You have selected **{{numberOfPersons}}** persons.</h5>
</template>

有人可以帮我吗?

解决方法

要将数据从一个组件传递到其他组件,您需要使用props:

第一部分:

<second-component-name :selectedOption="selectedOption"></second-component-name>

<script>
export default {

   components: {
        'second-component-name': require('./secondComponent.vue'),},data() {
        return {
          selectedOption: ''
        }
    }
}
</script>

第二部分:

<template>
    <div>
        {{ selectedOption }}
    </div>
</template>

<script>
    export default {
        props: ['selectedOption']
    }
</script>

请访问this link.

希望这对你有所帮助!

Markdown文件居然也可以直接作为Vue路由组件?

Markdown文件居然也可以直接作为Vue路由组件?

本文为Varlet组件库源码主题阅读系列第五篇,读完本文你可以了解到如何通过编写一个Vite插件来支持使用md文件直接作为路由组件。

之前文档站点的搭建里我们介绍了路由的动态生成逻辑,其中说到了文档是使用Markdown格式编写的,并且还直接在路由文件里使用md文件作为路由组件:

路由就是路径到组件的映射,这个组件显然指的是Vue组件,Vue组件是一个包含特定选项的JavaScript对象,我们平常开发一般使用的是Vue单文件,单文件最终也会被编译成选项对象,这个工作是@vitejs/plugin-vue做的,显然这个插件并不能处理Markdown文件,那么最终也就无法生成正确的Vue组件。

解决方法就是编写一个Vite插件,指定在@vitejs/plugin-vue插件之前调用,将.md文件的内容转换为Vue单文件的格式,然后配置@vitejs/plugin-vue插件,让它顺便也处理一下扩展名为.md的文件,因为已经转换成Vue单文件的语法格式了,所以它可以正常处理,接下来从源码角度来详细了解一下。

Vite配置

之前的文章里详细介绍了启动服务时的Vite配置,这里只看一下涉及到的插件部分:

// varlet-cli/src/config/vite.config.ts
import vue from ''@vitejs/plugin-vue''
import md from ''@varlet/markdown-vite-plugin''

export function getDevConfig(varletConfig: Record<string, any>): InlineConfig {
    return {
        plugins: [
            vue({
                include: [/\.vue$/, /\.md$/],// vue插件默认只处理.vue文件,通过该参数配置让其也处理一下.md文件
            }),
            md({ style: get(varletConfig, ''highlight.style'') }),// 使用md文件转换插件,使用插件时可以传入参数
        ]
    }
}

markdown-vite-plugin插件

插件代码在varlet-markdown-vite-plugin目录,一个Vite插件就是一个函数,接收使用时传入的参数,最终返回一个对象。Vite插件扩展了Rollup的接口,并且带有一些 Vite 独有的配置项,配置项类型基本就是两种,一种是属性,一种是钩子函数,插件的主要逻辑都在钩子函数里,RollupVite提供了构建和编译时各个时机的钩子,插件可以根据功能选择对应的钩子。

Vite插件文档:插件API。

Rollup插件文档:plugin-development。

// varlet-markdown-vite-plugin/index.js
function VarletMarkdownVitePlugin(options) {
  return {
    name: ''varlet-markdown-vite-plugin'',// 插件名称
    enforce: ''pre'',// 插件调用顺序
    // Rollup钩子,转换文件内容
    transform(source, id) {
      if (!/\.md$/.test(id)) {
        return
      }
      try {
        return markdownToVue(source, options)
      } catch (e) {
        this.error(e)
        return ''''
      }
    },
    // Vite钩子,用于热更新
    async handleHotUpdate(ctx) {
      if (!/\.md$/.test(ctx.file)) return
      const readSource = ctx.read
      ctx.read = async function () {
        return markdownToVue(await readSource(), options)
      }
    },
  }
}
module.exports = VarletMarkdownVitePlugin

以上就是这个插件的函数,返回了一个对象,name属性为插件的名称,必填,用于信息和错误输出时的提示;enforce用于指定钩子的调用顺序:

vue插件没有指定,所以md插件会在其之前调用,保证到它这里.md文件的内容已经转换完毕。

接下来配置了两个钩子函数,我们详细来看。

md文件内容转换

transform是Rollup提供的构建阶段的钩子,可以在这个钩子内转换文件的内容,先判断文件后缀是否是.md,不是的话就不进行处理,是的话调用了markdownToVue方法:

// varlet-markdown-vite-plugin/index.js
function markdownToVue(source, options) {
    const { source: vueSource, imports, components } = extractComponents(source)
    // ...
}

支持在md文件中引入Vue组件

source即文件内容,进来先调用了extractComponents方法,这个方法是干嘛的呢,是用来支持在md文件里引入Vue组件的,比如布局组件中的Row组件的文档:

引入了Responsive.vue组件,最终在页面上的渲染效果如下:

知道了它的作用后我们再来看一下实现:

// varlet-markdown-vite-plugin/index.js
function extractComponents(source) {
  const componentRE = /import (.+) from [''"].+[''"]/
  const importRE = /import .+ from [''"].+[''"]/g
  const vueRE = /```vue((.|\r|\n)*?)```/g
  const imports = []
  const components = []
  
  // 替换```vue....```的内容
  source = source.replace(vueRE, (_, p1) => {
    // 解析出import语句列表
    const partImports = p1.match(importRE)
    const partComponents = partImports?.map((importer) => {
      // 去除换行符
      importer = importer.replace(/(\n|\r)/g, '''')
      // 解析出导入的组件名
      const component = importer.replace(componentRE, ''$1'')
      // 收集导入语句及导入的组件
      !imports.includes(importer) && imports.push(importer)
      !components.includes(component) && components.push(component)
      // 返回使用组件的字符串
      return `<${kebabCase(component)} />`
    })
    return partComponents ? `<div>${partComponents.join(''\n'')}</div>` : ''''
  })
  return {
    imports,
    components,
    source,
  }
}

以前面的为例,source为:

xxx

​```vue
import BasicExample from ''../example/Responsive.vue''
​```

xxx

匹配到vueREp1为:

import BasicExample from ''../example/Responsive.vue''

使用importRE正则匹配后可以得到partImports数组:

[
    `import BasicExample from ''../example/Responsive.vue''`
]

遍历这个数组,然后解析出componentBasicExample,将导入语句及组件名称收集起来,然后拼接模板字符串为:

<div>
    <basic-example />
</div>

最后这个模板字符串会替换掉sourcevueRE匹配到的内容。

代码高亮

让我们继续回到markdownToVue方法:

// varlet-markdown-vite-plugin/index.js
const markdown = require(''markdown-it'')

function markdownToVue(source, options) {
    // ...
    const md = markdown({
        html: true,// 允许存在html标签,这是必要的,因为前面处理Vue组件最后会生成html标签
        typographer: true,// 允许替换一些特殊字符,https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js
        highlight: (str, lang) => highlight(str, lang, options.style),// 代码高亮,str为要高亮的代码,lang为语言种类
    })
}

使用markdown-it解析markdown,并且使用了highlight属性自定义代码语法高亮:

// varlet-markdown-vite-plugin/index.js
const hljs = require(''highlight.js'')

function highlight(str, lang, style) {
  let link = ''''

  if (style) {
    link = ''<linkrel="stylesheet" href="'' + style + ''"/>''
  }

  if (lang && hljs.getLanguage(lang)) {
    return (
      ''<pre><code>'' +
      link +
      hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
      ''</code></pre>''
    )
  }

  return ''''
}

代码高亮使用的是highlight.js,最开始使用md插件时我们传入了参数:

{ style: get(varletConfig, ''highlight.style'') }

这个用于设置highlight.js的主题,一个主题就是一个css文件,highlight.js内置了非常多的主题:

默认配置如下:

所以当指定了主题的话会创建一个link标签来加载对应的主题样式,否则就使用默认的,默认主题定义在/site/pc/Layout.vue组件内:

这么做的好处是可以使用css变量,当页面切换暗黑模式时代码主题也可以跟着变化。

处理生成的html

继续看markdownToVue方法:

// varlet-markdown-vite-plugin/index.js
function markdownToVue(source, options) {
    // ...
    let templateString = htmlWrapper(md.render(vueSource))
  	templateString = templateString.replace(/process.env/g, ''<span>process.env</span>'')
}

调用render方法将markdown编译成html,然后调用了htmlWrapper方法:

// varlet-markdown-vite-plugin/index.js
function htmlWrapper(html) {
  const hGroup = html.replace(/<h3/g, '':::<h3'').replace(/<h2/g, '':::<h2'').split('':::'')
  const cardGroup = hGroup
    .map((fragment) => (fragment.includes(''<h3'') ? `<div>${fragment}</div>` : fragment))
    .join('''')
  return cardGroup.replace(/<code>/g, ''<code v-pre>'')
}

前两行做的事情就是把h3标签之后,h2标签之前的内容都用类名为carddiv包裹起来,目的是为了在页面上显示一个个块的效果:

最后一行是给code标签添加了一个v-pre指令,这个指令用来跳过该元素及其所有子元素的编译,因为文档的代码示例难免会涉及到Vue模板语法的示例,如果不跳过,直接就被编译了。

引入代码块组件

继续markdownToVue方法:

// varlet-markdown-vite-plugin/index.js
function markdownToVue(source, options) {
    // ...
    templateString = injectCodeExample(templateString)
}

又调用了injectCodeExample方法:

// varlet-markdown-vite-plugin/index.js
function injectCodeExample(source) {
  const codeRE = /(<pre>(.|\r|\n)*?<\/pre>)/g

  return source.replace(codeRE, (str) => {
    const flags = [
      ''// playground-ignore\n'',
      ''<span>#</span><span> playground-ignore</span>\n'',
      ''<span>// playground-ignore</span>\n'',
      ''<span>/* playground-ignore */</span>\n'',
      ''<span>&lt;!-- playground-ignore --&gt;</span>\n'',
    ]

    const attr = flags.some((flag) => str.includes(flag)) ? ''playground-ignore'' : ''''

    str = flags.reduce((str, flag) => str.replace(flag, ''''), str)

    // 引入var-site-code-example组件
    return `<var-site-code-example ${attr}>${str}</var-site-code-example>`
  })
}

Varlet提供了在线playground的功能:

可以直接从文档的代码块进行跳转:

但不是所有代码块都需要,比如:

所以就通过在文档上增加一个注释来注明忽略:

injectCodeExample方法就会检查是否存在这个标志,存在的话就给var-site-code-example组件传递一个不显示这个跳转按钮的属性,var-site-code-example组件的路径为/site/components/code-example/CodeExample.vue,用来提供代码块的展开收起、复制、跳转playground的功能。

组装Vue单文件的格式

最后就是按照Vue单文件的格式进行拼接了:

// varlet-markdown-vite-plugin/index.js
function markdownToVue(source, options) {
    // ...
    return `
        <template>
			<div>${templateString}</div>
		</template>

        <script>
            ${imports.join(''\n'')}

            export default {
              components: {
                ${components.join('','')}
              }
            }
        </script>
  	`
}

把转换得到的html内容添加到template标签内,把解析出的组件导入语句添加到script标签内,并且进行注册,转换成这种格式后,后续vue插件就可以正常处理了。

热更新

除了transform钩子,还使用到了handleHotUpdate钩子,这个钩子是Vite提供的,用来执行自定义的热更新处理,这个钩子接收一个上下文对象:

file是发生变化的文件,read是读取这个文件内容的方法,varlet-markdown-vite-plugin插件重写了这个方法:

// varlet-markdown-vite-plugin/index.js
function VarletMarkdownVitePlugin(options) {
  return {
    async handleHotUpdate(ctx) {
      if (!/\.md$/.test(ctx.file)) return

      const readSource = ctx.read
      ctx.read = async function () {
        return markdownToVue(await readSource(), options)
      }
    },
  }
}

目的和前面一样,就是把markdown语法转换成Vue单文件语法,vue插件也使用了这个钩子和read方法:

同样因为这个插件是在vue插件之前调用的,所以到了vue插件使用的就是被转换的read方法,就能在热更新时顺利处理.md文件。

处理markdown的插件就介绍到这里,我们下一篇再见,拜拜~

react router @4 和 vue路由 详解(一)vue路由基础和使用

react router @4 和 vue路由 详解(一)vue路由基础和使用

完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html

1、vue路由基础和使用

  a、大概目录

           我这里建了一个router文件夹,文件夹下有index.html

 


 

 

  b、准备工作:

    npm install vue-router

    或者 yarn add vue-router

 


 

 

  c、配置

    必须要通过 Vue.use() 明确地安装路由功能:
    在你的文件夹下的 src 文件夹下的 main.js 文件内写入以下代码

import Vue from ''vue''

import VueRouter from ''vue-router''

Vue.use(VueRouter)

    附上我的代码:我是将router的内容写在了我的router文件夹下的index.html中,然后暴露出去,在main.js中引入

    router文件夹下的index.html

import Vue from ''vue''
import VueRouter from ''vue-router''
Vue.use(VueRouter)

import Home from ''pages/Home''
import Map from ''components/Map''
import Home1 from ''components/Home1''
import Find from ''components/Find''
import Mine from ''components/Mine''
import Type from ''components/Type''
import Publish from ''components/Publish''
import Search from ''components/Search''
import Success from ''components/Success''
import Need from ''components/Need''
import Position0 from ''components/Position''
import Like from ''components/scrollX/Like''
import S1 from ''components/scrollX/1''
import S2 from ''components/scrollX/2''
import Listall from ''components/mine/Listall''
import Listone from ''components/mine/Listone''
import Listchange from ''components/mine/Listchange''

const routes = [
    {
        path:''/'',
        redirect:''/ho''
    },
    {
        path: ''/ho'',
        redirect:''/ho/home'',
        component: Home,
        children: [
            {
                name: ''home'',
                path: ''home'',
                component: Home1,
                redirect:''/ho/home/like'',
                children :[
                    {
                        name: ''like'',
                        path: ''like'',
                        component: Like
                    },
                    {
                        name: ''2000001'',
                        path: ''2000001'',
                        component: S1
                    },
                    {
                        name: ''2000022'',
                        path: ''2000022'',
                        component: S2
                    }
                ]
            },
            {
                name: ''type'',
                path: ''type'',
                component: Type
            },
            {
                name: ''need'',
                path: ''need'',
                component: Need
            },
            {
                name: ''find'',
                path: ''find'',
                component: Find
            },
            {
                name: ''mine'',
                path: ''mine'',
                component: Mine
            }
        ]
    },
    {
        name: ''search'',
        path: ''/search'',
        component: Search
    },
    {
        name: ''position'',
        path: ''/position'',
        component: Position0
    },
    {
        name: ''publish'',
        path: ''/publish'',
        component: Publish
    },
    {
        name: ''success'',
        path: ''/success'',
        component: Success
    },
    {
        name: ''listall'',
        path: ''/listall'',
        component: Listall
    },
    {
        name: ''listone'',
        path: ''/listone'',
        component: Listone
    },
    {
        name: ''listchange'',
        path: ''/listchange'',
        component: Listchange
    },
    {
        name: ''map'',
        path: ''/map'',
        component: Map
    }
]

const router = new VueRouter({
    mode: ''history'',
    routes
})

export default router
复制代码

    main.js

复制代码
import Vue from ''vue''
import App from ''./App.vue''
import router from ''./router''

Vue.use(MintUI)
Vue.use(ElementUI);

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount(''#app'')
复制代码

 


 

  d、常规使用

     <router-view></router-view>路由匹配到的组件将渲染在这里
    你可以把他理解为一个版块,比如现在有一个home页面,分为两部分,内容部分和ibar部分,如图:
    
    这五个页面共用下面的导航栏,只有导航栏上面的内容不同
    <router-view></router-view>就可以写在<Ibar></Ibar>的上面
复制代码
<template>
    <div>
        <router-view></router-view>
        <Ibar></Ibar>
    </div>
</template>
复制代码

    那么在Ibar页面中如何切换路由呢?

复制代码
<template>
    <div>
        <router-link to="/ho/home" tag="span" active->首页</router-link>
        <router-link to="/ho/type" tag="span" active->类别</router-link>
        <router-link to="/ho/need" tag="span" active->需求</router-link>
        <router-link to="/ho/find" tag="span" active->发现</router-link>
        <router-link to="/ho/mine" tag="span" active->我的</router-link>
    </div>
</template>
复制代码

    注意:此处的tag=“span”代表这个按钮是个span标签,你可以写样式的时候直接写span标签的样式即可

       此处的active-代表点击哪个按钮哪个按钮高亮

    

    此时我们详细看一下router文件夹下的index.js

复制代码
//引入vue   

import Vue from ''vue''

//引入路由
import VueRouter from ''vue-router''

//把路由挂载到vue上
Vue.use(VueRouter)
//引入我各个路由对应的component组件
import Home from ''pages/Home'' import Map from ''components/Map'' import Home1 from ''components/Home1'' import Find from ''components/Find'' import Mine from ''components/Mine'' import Type from ''components/Type'' import Publish from ''components/Publish'' import Search from ''components/Search'' import Success from ''components/Success'' import Need from ''components/Need'' import Position0 from ''components/Position'' import Like from ''components/scrollX/Like'' import S1 from ''components/scrollX/1'' import S2 from ''components/scrollX/2'' import Listall from ''components/mine/Listall'' import Listone from ''components/mine/Listone'' import Listchange from ''components/mine/Listchange''
const routes = [ {

     //path是路由的路径
path:''/'',

     //redirect代表重定向,因为当前路径''/''并没有对应的组件,所以需要重定向到其他路由页面
     redirect:''/ho'' }, { path: ''/ho'', redirect:''/ho/home'',

     //当不需要重定向的时候,需要component写上当前路由对应的组件页面
component: Home,

     //有些路由还有子路由,需要用到children[],
     //当访问的时候,<router-link>的属性to的时候要把所有的父组件都带上
     //如:此处的/ho/home/like
children: [ { name: ''home'', path: ''home'', component: Home1, redirect:''/ho/home/like'', children :[ { name: ''like'', path: ''like'', component: Like }, { name: ''2000001'', path: ''2000001'', component: S1 }, { name: ''2000022'', path: ''2000022'', component: S2 } ] }, { name: ''type'', path: ''type'', component: Type }, { name: ''need'', path: ''need'', component: Need }, { name: ''find'', path: ''find'', component: Find }, { name: ''mine'', path: ''mine'', component: Mine } ] }, { name: ''search'', path: ''/search'', component: Search }, { name: ''position'', path: ''/position'', component: Position0 }, { name: ''publish'', path: ''/publish'', component: Publish }, { name: ''success'', path: ''/success'', component: Success }, { name: ''listall'', path: ''/listall'', component: Listall }, { name: ''listone'', path: ''/listone'', component: Listone }, { name: ''listchange'', path: ''/listchange'', component: Listchange }, { name: ''map'', path: ''/map'', component: Map } ] const router = new VueRouter({

//此处设置mode为history,即不带#号,在处理数据的时候会更方便一些
mode: ''history'',

//ES6的写法,即routes:routes的简写,当key和value名字一样时,可简写
routes })
//把你创建的路由暴露出去,使得main.js可以将其引入并使用
export default router
复制代码

    引申1:

    路由有一个meta属性

    可以给该路由挂载一些信息

    设置一些自己title、显示隐藏、左右滑动的方向之类的

meta: {
      title: "HelloWorld",    要现实的title
      show: true               设置导航隐藏显示
}

    使用的时候:this.$route.meta.show

    <Bottom v-show="this.$route.meta.show"></Bottom>

 

    引申2:

    动态路由

{
    path:"/two/:id",
    component:Two,
}

    获取数据this.$route.params.动态路由的名字

    此处是:this.$route.params.id

 

    引申3:

    路由别名alias

复制代码
{ 
    path: ''/a'', 
    component: A, 
    alias: ''/b'' 
}
//  /a 的别名是 /b
//意味着,当用户访问 /b 时,URL 会保持为 /b,但是路由匹配则为 /a
//就像用户访问 /a 一样
//简单的说就是给 /a 起了一个外号叫做 /b ,但是本质上还是 /a
复制代码

 

 

今天关于如何在vue路由器中“ if-else”组件?vue路由beforeeach的分享就到这里,希望大家有所收获,若想了解更多关于javascript-如何在Vuetify组件中以编程方式设置组件属性、laravel – 如何在vue js中将数据从一个组件传递到另一个组件?、Markdown文件居然也可以直接作为Vue路由组件?、react router @4 和 vue路由 详解(一)vue路由基础和使用等相关知识,可以在本站进行查询。

本文标签: