Vue之路由 忘是亡心i 2021-11-22 21:58 289阅读 0赞 # Vue之路由 # 1. \*\*后端路由:\*\*对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源; 2. \*\*前端路由:\*\*对于单页面应用程序来说,主要通过URL中的hash(\#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现; 3. 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由); ## 在 vue 中使用 vue-router ## 1. 导入 vue-router 组件类库: <!-- 1. 导入 vue-router 组件类库 --> <script src="./lib/vue-router-2.7.0.js"></script> 1. 使用 router-link 组件来导航 <!-- 2. 使用 router-link 组件来导航 --> <router-link to="/login">登录</router-link> <router-link to="/register">注册</router-link> 1. 使用 router-view 组件来显示匹配到的组件 <!-- 3. 使用 router-view 组件来显示匹配到的组件 --> <router-view></router-view> 1. 创建使用`Vue.extend`创建组件 // 4.1 使用 Vue.extend 来创建登录组件 var login = Vue.extend({ template: '<h1>登录组件</h1>' }); // 4.2 使用 Vue.extend 来创建注册组件 var register = Vue.extend({ template: '<h1>注册组件</h1>' }); 1. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则 // 5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则 var router = new VueRouter({ routes: [ { path: '/login', component: login }, { path: '/register', component: register } ] }); 1. 使用 router 属性来使用路由规则 // 6. 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', router: router // 使用 router 属性来使用路由规则 }); ## 使用tag属性指定router-link渲染的标签类型 ## ## 设置路由重定向 ## ## 设置路由高亮 ## ## 设置路由切换动效 ## ## 在路由规则中定义参数 ## 1. 在规则中定义参数: { path: '/register/:id', component: register } 1. 通过 `this.$route.params`来获取路由中的参数: var register = Vue.extend({ template: '<h1>注册组件 --- { {this.$route.params.id}}</h1>' }); ## 使用 `children` 属性实现路由嵌套 ## <div id="app"> <router-link to="/account">Account</router-link> <router-view></router-view> </div> <script> // 父路由中的组件 const account = Vue.extend({ template: `<div> 这是account组件 <router-link to="/account/login">login</router-link> | <router-link to="/account/register">register</router-link> <router-view></router-view> </div>` }); // 子路由中的 login 组件 const login = Vue.extend({ template: '<div>登录组件</div>' }); // 子路由中的 register 组件 const register = Vue.extend({ template: '<div>注册组件</div>' }); // 路由实例 var router = new VueRouter({ routes: [ { path: '/', redirect: '/account/login' }, // 使用 redirect 实现路由重定向 { path: '/account', component: account, children: [ // 通过 children 数组属性,来实现路由的嵌套 { path: 'login', component: login }, // 注意,子路由的开头位置,不要加 / 路径符 { path: 'register', component: register } ] } ] }); // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: {}, methods: {}, components: { account }, router: router }); </script> ## 命名视图实现经典布局 ## 1. 标签代码结构: <div id="app"> <router-view></router-view> <div class="content"> <router-view name="a"></router-view> <router-view name="b"></router-view> </div> </div> 1. JS代码: <script> var header = Vue.component('header', { template: '<div class="header">header</div>' }); var sidebar = Vue.component('sidebar', { template: '<div class="sidebar">sidebar</div>' }); var mainbox = Vue.component('mainbox', { template: '<div class="mainbox">mainbox</div>' }); // 创建路由对象 var router = new VueRouter({ routes: [ { path: '/', components: { default: header, a: sidebar, b: mainbox } } ] }); // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: {}, methods: {}, router }); </script> 1. CSS 样式: <style> .header { border: 1px solid red; } .content{ display: flex; } .sidebar { flex: 2; border: 1px solid green; height: 500px; } .mainbox{ flex: 8; border: 1px solid blue; height: 500px; } </style> ## `watch`属性的使用 ## 考虑一个问题:想要实现 `名` 和 `姓` 两个文本框的内容改变,则全名的文本框中的值也跟着改变;(用以前的知识如何实现???) 1. 监听`data`中属性的改变: <div id="app"> <input type="text" v-model="firstName"> + <input type="text" v-model="lastName"> = <span>{ {fullName}}</span> </div> <script> // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: { firstName: 'jack', lastName: 'chen', fullName: 'jack - chen' }, methods: {}, watch: { 'firstName': function (newVal, oldVal) { // 第一个参数是新数据,第二个参数是旧数据 this.fullName = newVal + ' - ' + this.lastName; }, 'lastName': function (newVal, oldVal) { this.fullName = this.firstName + ' - ' + newVal; } } }); </script> 1. 监听路由对象的改变: <div id="app"> <router-link to="/login">登录</router-link> <router-link to="/register">注册</router-link> <router-view></router-view> </div> <script> var login = Vue.extend({ template: '<h1>登录组件</h1>' }); var register = Vue.extend({ template: '<h1>注册组件</h1>' }); var router = new VueRouter({ routes: [ { path: "/login", component: login }, { path: "/register", component: register } ] }); // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: {}, methods: {}, router: router, watch: { '$route': function (newVal, oldVal) { if (newVal.path === '/login') { console.log('这是登录组件'); } } } }); </script> ## `computed`计算属性的使用 ## 1. 默认只有`getter`的计算属性: <div id="app"> <input type="text" v-model="firstName"> + <input type="text" v-model="lastName"> = <span>{ {fullName}}</span> </div> <script> // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: { firstName: 'jack', lastName: 'chen' }, methods: {}, computed: { // 计算属性; 特点:当计算属性中所以来的任何一个 data 属性改变之后,都会重新触发 本计算属性 的重新计算,从而更新 fullName 的值 fullName() { return this.firstName + ' - ' + this.lastName; } } }); </script> 1. 定义有`getter`和`setter`的计算属性: <div id="app"> <input type="text" v-model="firstName"> <input type="text" v-model="lastName"> <!-- 点击按钮重新为 计算属性 fullName 赋值 --> <input type="button" value="修改fullName" @click="changeName"> <span>{ {fullName}}</span> </div> <script> // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: { firstName: 'jack', lastName: 'chen' }, methods: { changeName() { this.fullName = 'TOM - chen2'; } }, computed: { fullName: { get: function () { return this.firstName + ' - ' + this.lastName; }, set: function (newVal) { var parts = newVal.split(' - '); this.firstName = parts[0]; this.lastName = parts[1]; } } } }); </script> ## `watch`、`computed`和`methods`之间的对比 ## 1. computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用; 2. methods方法表示一个具体的操作,主要书写业务逻辑; 3. watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computed和methods的结合体; ## `nrm`的安装使用 ## 作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址; 什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原因,经常访问不到,这时候,我们可以在国内,创建一个和官网完全一样的NPM服务器,只不过,数据都是从人家那里拿过来的,除此之外,使用方式完全一样; 1. 运行`npm i nrm -g`全局安装`nrm`包; 2. 使用`nrm ls`查看当前所有可用的镜像源地址以及当前所使用的镜像源地址; 3. 使用`nrm use npm`或`nrm use taobao`切换不同的镜像源地址; 转载于:https://www.cnblogs.com/Yaucheun/p/10836905.html
相关 VUE_vue动态路由,引入所有路由,vue路由模块化 require.context 主要使用require.context实现前端工程化动他引入文件 require.context(directory, useSubdir 蔚落/ 2022年11月04日 00:52/ 0 赞/ 271 阅读
相关 vue 路由、嵌套路由、动态路由 简介 路由就是一套映射规则,当url中的哈希值(\hash)改变时,路由会根据制定好的规则,展示对应的视图组件。 vue中的路由路径分为:相对路径(不带 ‘/’,会拼接 朴灿烈づ我的快乐病毒、/ 2022年10月29日 13:28/ 0 赞/ 401 阅读
相关 vue 路由 [https://router.vuejs.org/zh-cn/][https_router.vuejs.org_zh-cn] 用 Vue.js + vue-router 创 蔚落/ 2022年06月07日 10:54/ 0 赞/ 270 阅读
相关 Vue路由 一个实例: <!DOCTYPE html> <html> <head> <title>Vue.js路由router</title> 绝地灬酷狼/ 2022年05月10日 09:44/ 0 赞/ 281 阅读
相关 Vue之路由 默认的配置文件为router.js import Vue from 'vue' import Router from 'vue-router' imp 小灰灰/ 2022年04月18日 00:10/ 0 赞/ 208 阅读
相关 vue路由 一、App.vue中的<router-view></router-view> 凡是定义到index.js中的组件,都会被渲染到App.vue中 二、路由跳转和a标签的 秒速五厘米/ 2022年03月08日 11:24/ 0 赞/ 371 阅读
相关 Vue路由 vue-router 基本使用 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> 蔚落/ 2022年02月24日 02:56/ 0 赞/ 324 阅读
相关 vue路由 Vue.js - vue路由 一 什么是路由 1. 后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源; 2. 前端 灰太狼/ 2022年01月05日 07:23/ 0 赞/ 346 阅读
相关 Vue之路由 Vue之路由 1. \\后端路由:\\对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源; 2. \\前端路由:\\对于单页面应用程 忘是亡心i/ 2021年11月22日 21:58/ 0 赞/ 290 阅读
相关 vue路由 vue路由 一、vue关于路由的5个重要对象 > 1、router-view:类似angular中的router-outlet,router-view会不断的改 浅浅的花香味﹌/ 2021年09月15日 14:48/ 0 赞/ 518 阅读
还没有评论,来说两句吧...