首页 > 其他分享 >组件和路由

组件和路由

时间:2023-09-09 11:58:55浏览次数:31  
标签:const component template 组件 path 路由

title: 组件和路由
index_img: https://tuchuangs.com/imgs/2023/08/19/ed0d2ae1e2cddc41.png
tags:
  - Java Web
  - 前端
  - Vue
categories:
  - Java Web
excerpt: 组件和路由

组件【搭配路由使用】

全局组件(极少使用)

全局可用

注册

在vue实例外部

data应该是函数,否则每次的数据都一样,我不希望每个使用了该组件的数据都相同。

vue.component(‘组件名’,{

// data、method、template等

})

使用

支持复用,使用一次,就展示一次

<组件名></组件名>

案例

<body>
    <div id="app">
        <!-- 使用全局组件 -->
        <login></login>

    </div>
</body>

<script>
    // 定义全局组件【需要在vue实例创建之前】
    Vue.component('login', {
      //模板语法都要用根组件包裹【内容不止一个,易语法错误】
        template: '<div>用户{{username}}登录</div>',
        data() {
            return {
                username: '张三'
            }
        }
    });

    const vm = new Vue({
        el: '#app'
    })

</script>

局部组件

作用域局部

注册

在vue实例内部

components: {
            组件名: { 
                template: `<div><h1>add组件</h1></div>`
            }
        }

使用

支持复用,使用一次,就展示一次

<组件名></组件名>

案例

<body>
    <div id="app">
        <!-- 使用局部组件 -->
        <add></add>
    </div>
</body>

<script>
    const vm = new Vue({
        el: '#app',
        // 定义局部组件
        components: {
            add: { //定义
              //模板语法都要用根组件包裹【内容不止一个,易语法错误】
                template: `<div><h1>add组件</h1></div>`
            }
        }
    })
</script>

简写

<body>
    <div id="app">
        <!-- 使用局部组件 -->
        <login></login>
        <register></register>
    </div>
</body>

<script>
    const login = {
        template: `<div><h1>用户登录</h1></div>`
    }

    const register = {
        template: `<div><h1>用户注册</h1></div>`
    }

    const vm = new Vue({
        el: '#app',
        // 定义局部组件
        components: {
            login,
            register
        }
    })
</script>

组件中的配置项

data应该是函数,否则每次的数据都一样,我们不希望每个使用了该组件的数据都相同。

<body>
    <div id="app">
        <!-- 使用局部组件 -->
        <login></login>
        <register></register>
    </div>
</body>

<script>
    const login = {
        template: `<div><h1>用户登录{{status}}</h1></div>`,
        data() {
            return {
                status: '成功'
            }
        }
        methods: {
            //这里的this是此组件的this
        }
        //其它配置项
    }


    const register = {
        template: `<div><h1>用户注册</h1></div>`
    }

    const vm = new Vue({
        el: '#app',
        // 定义局部组件
        components: {
            login,
            register
        }
    })
</script>

路由概述

  • 如果所有组件都写在一个界面中,有的组件我们展示用不到,它也会全部加载,并不合理。
  • vue router可以使开发更加灵活,它可以根据不同的请求URL,只展示相关的组件
  • 将组件由Vue实例交由Vue router管理
    • 创建路由对象
    • Vue注册路由
    • 页面中使用组件:<router-view></router-view>
      • URL和路由中的路径规则匹配上,就加载该组件

使用

<body>
    <div id="app">
        <!-- #使hash路由(相对绝对路由) -->
        <a href="#/">首页</a>
        <a href="#/login">登录</a>
        <a href="#/register">注册</a>

        <!-- 显示路由组件,URL匹配上就展示该组件 -->
        <router-view></router-view>
    </div>
</body>

<script>
    const index = {
        template: `<div><h1>首页</h1></div>`,
    }

    const login = {
        template: `<div><h1>用户登录</h1></div>`,
    }

    const register = {
        template: `<div><h1>用户注册</h1></div>`
    }

    const NotFind = {
        template: `<div><h1>404,notFind</h1></div>`
    }

    // 创建路由规则对象
    const router = new VueRouter({
        // 对应一个组件对于一个路由,也支持redirect重定向【不是1对1时使用】
        routes: [
            // 格式,路径和对应组件
            { path: '/', component: index },
            { path: '/login', component: login },
            { path: '/register', component: register },
            { path: '*', component: NotFind }  //404路由,写在最后,否则全匹配了
        ]
    })

    const vm = new Vue({
        el: '#app',
        // 注册路由
        router,
    })
</script>

image-20230819212636875

切换路由

方式1

<a href="#/">首页</a>
<a href="#/login">登录</a>
<a href="#/register">注册</a>

方式2

不用写#

 <router-link to="/">首页</router-link>
 <router-link to="/login">登录</router-link>
 <router-link to="/register">注册</router-link>

相同路由切换和解决

<body>
    <div id="app">
        <router-link to="/">首页</router-link>
        <router-link to="/login">登录</router-link>
        <router-link to="/register">注册</router-link>
        <button @Click="change1">登录</button>
        <button @Click="change2">注册</button>

        <!-- 显示路由组件,URL匹配上就展示该组件 -->
        <router-view></router-view>
    </div>
</body>

<script>
    const index = {
        template: `<div><h1>首页</h1></div>`,
    }

    const login = {
        template: `<div><h1>用户登录</h1></div>`,
    }

    const register = {
        template: `<div><h1>用户注册</h1></div>`
    }

    const NotFind = {
        template: `<div><h1>404,notFind</h1></div>`
    }

    // 创建路由规则对象
    const router = new VueRouter({
        // 对应一个组件对于一个路由,也支持redirect重定向【不是1对1时使用】
        routes: [
            // 格式,路径和对应组件
            { path: '/', component: index },
            { path: '/login', component: login },
            { path: '/register', component: register },
            { path: '*', component: NotFind }  //404路由,写在最后,否则全匹配了
        ]
    })

    // 切换相同路由会出错,用这段代码解决
    const originalPush = VueRouter.prototype.push
    VueRouter.prototype.push = function push(location) {
        return originalPush.call(this, location).catch(err => err)
    }

    const vm = new Vue({
        el: '#app',
        methods: {
            change1() {
                console.log(this)
                // this.$route表示当前路由对象,this.$router表示路由管理器对象(由它切换)
                this.$router.push('/login') //切换路由
            },
            change2() {
                console.log(this)
                this.$router.push('/register')
            },
        },
        // 注册路由
        router,
    })
</script>

路由嵌套

案例:在同一个页面内操作

<body>
    <div id="app">
        <!-- 这里展示的是父路由 -->
        <router-view></router-view>
    </div>
</body>

<template id="userForm">
    <div>
        <h3>用户表</h3>
        <table border="1">
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
            <tr v-for="user in users">
                <td>{{user.id}}</td>
                <td>{{user.name}}</td>
                <td>{{user.age}}</td>
                <td>
                    <!-- 通过父路由访问 -->
                    <router-link to="/user/add">添加</router-link>
                    <router-link to="/user/det">删除</router-link>
                </td>
            </tr>
        </table>
        <!-- 展示子路由 -->
        <router-view></router-view>
    </div>
</template>

<script>
    // user组件
    const user = {
        template: '#userForm',  //可以使用引入的方式
        data() {
            return {
                users: []
            }
        },
        created() {
            //假设axios请求,查询数据
            this.users =
                [
                    { id: 1, name: 'TOm', age: 12 },
                    { id: 2, name: 'java', age: 13 },
                    { id: 3, name: 'python', age: 23 },
                ]
        }
    }

    //add组件
    const add = {
        template: `<div>增加成功</div>`,
        created() {
            //axios添加数据
            //更新表格
        }
    }

    //删除组件
    const det = {
        template: `<div>删除成功</div>`,
        created() {
            //axios删除数据
            //更新表格
        }
    }

    //路由对象
    const router = new VueRouter({
        routes: [
            { path: '/', redirect: '/user' },
            {
                path: '/user', component: user,
                children: [
                    // 子路由不加/
                    { path: 'add', component: add },
                    { path: 'det', component: det },
                ]
            }
        ]
    })

    //vue实例
    const vm = new Vue({
        el: '#app',
        router,
    })
</script>

image-20230819231516444

标签:const,component,template,组件,path,路由
From: https://www.cnblogs.com/SimpleWord/p/17689201.html

相关文章

  • 数据通信网络之IPv6静态路由
    文章及资源归档至公众号【AIShareLab】,回复通信系统与网络可获取。一、目的掌握路由器的IPv6基础配置。掌握静态IPv6路由的基础配置。理解IPv6数据报文的路由过程。二、拓扑如图1所示,三台路由器R1、R2和R3分别通过相应物理接口进行连接,其中,R1及R3各自下联一个网段......
  • vue项目实战之图片画廊组件的实现
    前言笔者曾经写过不少或原生的、或封装的第三方插件的组件,总结来说,并不是所有东西都用原生,自定义的才是好的。很多插件做的也是不错的。就比如笔者今天所用的这个插件:vue-awesome-swiper——这个还是很强的【轮播图】/【滚动】插件。非常的好用、方便。需要详细了解的可以去GitHu......
  • 浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程
    浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,Controller(控制器)将View(视图、用户客户端)与Model(javaBean:封装数据)分开构成了MVC,今天我们浅聊一下SpringMVC的相关组件以及通过源码了解器执行流程SpringMVC的核心组......
  • Swing中的组件
    1.顶级容器JFrame(框架):表示主程序窗口JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口JApplet(小程序):在浏览器内显示一个小程序界面2.布局方式1、边界布局(BorderLayout)2、流式布局(FlowLayout)3、网格布局(GridLayout)4、盒子布局(BoxLaYout)5、空布局(null)3.......
  • 2023-09-08 小程序之启用组件按需注入 ==》 添加一行代码:"lazyCodeLoading": "require
    在manifest.json文件里面的mp-weix对象添加代码:"lazyCodeLoading":"requiredComponents"可实现组件按需注入,引用官方说法就是:启用按需注入后,小程序仅注入当前访问页面所需的自定义组件和页面代码。未访问的页面、当前页面未声明的自定义组件不会被加载和初始化,对应代码文件将不被......
  • 【疑难解决】运行EasyRTSPSever组件提示程序无法启动问题解决
    RTSP协议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如:暂停/继续、后退、前进等。因此RTSP又称为“因特网录像机遥控协议”。我们的RTSP-Sever组件EasyRTSPSever就是一款比较便捷的组件。我们有开发者在测试EasyRTSPS......
  • 安防教育直播项目应用中RTSPSever组件libEasyRTSPServer编译arm版本报undefined refer
    大家知道我们团队编译过很多产品的ARM版本,对用户来说,多一种编译方式也是多一种选择,所以我们一直在拓宽TSINGSEE青犀视频全线产品的运用范围。近期TSINGSEE青犀视频研发团队编译了libEasyRTSPServer的ARM版本,在此过程中,我们遇到了编译错误undefinedreferenceto`uselocale’。libE......
  • React项目笔记-环境搭建、路由封装(跳转Navigate、懒加载lazy)、模块化样式引入、状态管
    环境准备nodev16.15.0npm8.5.5AntDesignofReact:https://ant.design/docs/react/introduce-cn一,创建项目npminitvite√Projectname:...vite-project-react√Selectaframework:»React√Selectavariant:»TypeScript然后使用vscode打开项目,由于......
  • vue路由跳转
    第一种方式  <router-link :target="$store.getters.username?'_blank':'_self'"class="course-item-cont":to="$store.getters.username?{path:'/VirtualClass/Detail',query:{id:item.id,introductionPat......
  • 【微信小程序-组件】仪表盘样式的滑动组件(不卡顿)
    滑动组件,选中后手机会振动 <template><viewclass="gear-select"><viewclass="scale-mark-container"><viewclass="every-scale-mark"v-for="(gear,index)ofgearList":key="ge......