1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 七天学完Vue之第四天学习笔记(ref获取dom元素和组件以及路由的讲解)

七天学完Vue之第四天学习笔记(ref获取dom元素和组件以及路由的讲解)

时间:2022-03-19 11:13:26

相关推荐

七天学完Vue之第四天学习笔记(ref获取dom元素和组件以及路由的讲解)

第四天(ref获取dom元素和组件以及路由的讲解)

1.7.1. ref获取dom元素和组件

1.首先为要被获取的dom元素或者组件设置id

2.设置 ref属性为id (组件的id,在引用标签ref)例如

<tempalte id="seven">...</tempalte> <login ref="seven"><login>

3.使用方法 this.$refs.seven.数据(innerText)

代码例子:

<body><div id="app"><input type="button" value="操作" @click="ccc()" /><h2 id="re1" ref="re1">科比</h2><h3 id="re2" ref="re2">{{s1}}</h3><duiixiang ref="tmp"></duiixiang></div><template id="tmp"><div><h1 id="tempre" ref="tempre">哈哈哈哈哈哈哈</h1></div></template><script type="text/javascript">var duiixiang = {template: '#tmp',data: function() {return{id: 1,name: '小小怪'}},methods:{shuchu() {console.log('组件里的方法');}}}var vm = new Vue({el:'#app',data:{s1:'贾真琦'},components:{duiixiang},methods:{ccc() {console.log(this.$refs.re1.innerText);//获取domconsole.log(this.$refs.re2.innerText);console.log(this.$refs.tmp.$refs.tempre.innerText); //获取组件里的domconsole.log(this.$refs.tmp.id);console.log(this.$refs.tmp.name); //获取 组件里data的数据this.$refs.tmp.shuchu(); //获取组件里的方法}}});</script></body>

1.7.2. 路由

##什么是路由

**后端路由: **对于普通的网站,所有的超链接都是URL地址, 所有的URL地址都对应服务器上对应的资源;

**前端路由: **对于单页面应用程序来说,主要通过URL中的hash (#号)来实现不同页面之间的切换,同时,hash有一个特点: httP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;

3.在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由) ;

• 路由的基本使用

1.首先引入 vue.js再引入 vue-router.js

2.创建组件

<template id="tmp2"><div><button type="button" @click="dd">登录</button></div></template>

3.创建路由对象

var routerobj = new VueRouter({//路由匹配规则,每个匹配规则都是一个对象(有两个属性)//属性1 是 path, 表示监听,那个路由链接地址//属性2 是 component 对应的组件routes: [{path: '/login', component: login},{path: '/register', component: register}]});

4.在vm对象里 添加 router: 路由对象

例子:var vm = new Vue({el:'#app',data:{},methods:{},router: routerobj});

5.使用 标签显示

<div id="app"><router-link to="/login">登录</router-link><router-link to="/register">注册</router-link><router-view></router-view></div>

用来显示路由的组件的

用来做链接路由地址,默认渲染成标签

可通过tag属性更改

<router-link to="/login" tag="p">登录</router-link><router-link to="/register">注册</router-link>

通过添加 repalce可以设置 mode的 history为 repalce

• 路由的redirect重定向

{path:’/’, redirect: login}

• 选中路由高亮显示

• .router-link-active

路由会自动的激活这个类

为.router-link-active添加高亮样式即可

• 可自定义.router-link-active的类名

在路由对象的linkActiveClass选项中可以修改.router-link-active的名字,

<style type="text/css">.gaoliang {color: #1B6D85;background-color: red;font-size: 30px;}</style>var routerobj = new VueRouter({//路由匹配规则,每个匹配规则都是一个对象(有两个属性)//属性1 是 path, 表示监听,那个路由链接地址//属性2 是 component 对应的组件routes: [{path:'/', redirect: login},{path: '/login', component: login},{path: '/register', component: register}],linkActiveClass:'gaoliang'});

• 路由用动画控制

直接使标签被包裹进即可实现动画效果

• 路由传参

• 使用 query实现

1.在转入此路由时,以?传值。值会保存在这个路由this.$route.query中

<router-link to="/a?id&name">登录</router-link>

2.使用 this.$route.query.变量调用即可

• 使用params实现

{path:’/a/:id/:name’, component: login}

1.设置传值为 /:变量的时候传入的值会保存到this.$route.params

2.使用this.$route.params.id调用传入的值

• 使用children实现路由嵌套

主要实现: 在 父级路由规则里 加children选项列表,存错子路由{path, component}

注意事项:

1.子路由的链接标签 要写全(有父级路由路径)例子:

<!-- 这里要带上父级路由路径 --><router-link to="/a/login">登录</router-link><router-link to="/a/register

2.子路由的路径不可带/,否则在根目录开始找,会出错

children:[

//这里的路径不能带/,否子以根路径为基本

{path:‘login’, component:login},

{path:‘register’, component:register}

]

具体实现

创建父级组件包含两个子路由链接与路由显示标签

<template id="tmp1"><div><h1>seven</h1><!-- 这里要带上父级路由路径 --><router-link to="/a/login">登录</router-link><router-link to="/a/register">注册</router-link><router-view></router-view></div></template>

2.在父路由里添加children选项

var viue = {template:'#tmp1'}var login = {template:'#tmp2'}var register = {template:'#tmp3'}var routerobj = new VueRouter({routes:[{path:'/', redirect:viue},{path:'/a',component:viue,children:[//这里的路径不能带/,否子以根路径为基本{path:'login', component:login},{path:'register', component:register}]}]});

• 实现经典布局

1.为显示的容器设置name

<router-view></router-view><div class="xxx"><router-view name="left"></router-view><router-view name="main"></router-view></div>

2.在设置路由规则的第二个属性,用components

{path:’/’, components:{

‘default’: header,

‘left’: leftBox,

‘main’: mainBox

}}

1.7.3. 属性

• watch选项实现监听data数据

watch : { ‘data数据’ : function(newVal, oldVal) {

} }

• watch监听路由

1.监听路由实现: 基于 $route.path保存了当前的路由情况

2.在使用条件判断是否为当前路由时,注意使用有参数的函数 的参数 newVal进行判断,不要使用route.path或者‘route.path或者‘route.path或者‘route.path’,无效果。

使用===判断数值相同且类型相同

watch:{

‘$route.path’: function(newVal, oldVal) {

console.log(newVal + “-----” + oldVal);

if (newVal === ‘/login’){

alert(“欢迎登录!”);

}

if (newVal === ‘/register’){

alert(“欢迎注册!”)

}

}

}

• 使用computed计算属性

// 在computed中,可以定义一些属性,计算属性的本质,就是一个方法,只不过我

// 们在使用这些属性的时候.是把他们的名称,直接当作属性来用.并不会把计算属性当方法去调用

注意事项:

计算属性, 引用的时候,不可以加上()去调用,直接把它当成普通的属性用就行

只要计算属性的function内部,所用到的任何data发生变化,就会重新计算这个属性的值

计算属性的求值结果,会被缓存起来,方便下次的直接使用

computed:{'s4': function() {console.log('ok');return this.s1+'-'+this.s2;}}

• 对比methods、watch、computed

[ computed ]属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;[ methods ]方法表示一个具体的操作,主要书写业务逻辑;[ watch]-个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,

从而进行某些具体的业务逻辑操作;可以看作是[ computed ]和[ methods ]的结合体;

谢谢观看~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。