小球动画flag标识符的作用分析
在半场小球动画案例中,的afterEnter钩子函数里面原先写的是this.flag=!this.flag
,如果改成el.style.opacity=0.5
,则会没有动画效果。
Vue把一个完整的动画,使用钩子函数,拆分为了两部分:我们使用flag标识符,来表示动画的切换;刚一开始,flag=false,然后变成true,然后便变成false。
组件传值–父组件向子组件传值,data和props的区别
子组件中,默认无法访问到父组件中的data上的数据和methods中的方法。
父组件可以在引用子组件的时候,通过属性绑定(v-bind:)的形式,把需要传递给子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用。
把父组件传递过来的属性,先在props数组中,定义一下,这样我们才能在子组件中使用父组件的数据。
注意:
+ 组件中的所有props中的数据,都是通过父组件传递给自组件的。
+ 子组件中的data数据,并不是通过父组件传递过来的,而是子组件自己私有的,比如:子组件通过AJAX,请求回来的数据,都可以放到data身上。
+ props中的数据都是只读的,无法重新赋值
+ data上的数据都是可读可写的。
1 | <div id="app"> |
1 | com:{ |
组件传值–子组件通过事件调用向父组件传值(父组件把方法传递给子组件)
1 | <div id="app"> |
1 | //父组件中的方法 |
1 | com:{ |
使用ref获取DOM元素和组件
ref是英文单词reference的简写。
通过ref可以拿到组件的引用和一些组件的数据。
ref也可以拿到一些DOM元素,并且可以在不直接操作DOM元素的情况下去操作DOM元素。引用的时候要加refs,但是绑定的时候不用加s,只用写ref就可以了。由于refs是挂载在实例上的一个对象属性,所以,需要在vm中使用,并且需要添加this来使用。
1 | <div id="app"> |
1 | var login = { |
路由
什么是路由
1、后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源。
2、前端路由:对于单页面应用程序来说,主要通过URL中的hash(#)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容,所以,单页面程序中的原页面跳转主要用hash实现
3、在单页面应用程序中,这种通过hash改变切换页面的方式,乘坐前端路由。(区别于后端路由)
在vue中使用vue-router
基础使用
创建一个路由对象,当导入vue-router包之后,在window全局对象中,就有了一个路由的构造函数,叫做VueRouter,
1 | <div id="app"> |
1 | //组件模板对象 |
1 | //创建一个对象,在new路由对象的时候,可以为构造函数传递一个配置对象 |
.router-link-active是路由选中时候的样式设置,是默认的,如果想要修改该属性名称,需要在router构造函数添加一个linkActiveClass:'myclass'
来对其进行属性名称修改,这样的话,在设置路由高亮时候的属性名称就要写成.myclass:{}
来对其进行路由高亮显示设置了。
为路由页面切换添加动画
只需要把router-view标签用transition标签包裹起来,然后再进行动画设计
路由传参
query传参
query传参是挂载到一个路由对象上,通过调用路由对象的属性来进行传参的。
query可以多个传参,传参方式如下
1 | <router-link to="/login?id=10&name=zs"></login> |
如果再路由中,使用查询字符串,给路由传递参数,则不需要修改路由规则(就是router实例中的route对象挂载的几个对象的path)的path属性。
通过this.$route.query.id来获取id的值,this.$route是路由对象,里面有很多路由对象的属性挂载。可以省略this。
模板对象为:
1 | var login = { |
所以query也可以在模板对象上获取多个数据
优点:1、不需要修改path路径规则
2、拿到参数直接通过this.$route.query.参数名或者$route.query.参数名拿到参数
params方式传递路由参数
这个方式说明的是,在/login后面放的就是id这个参数,会一一对应起来。传递参数的时候,直接就在router-link里面的to的路径后面添加要传递的id值过去就行了。具体如下:
1 | var router = new VueRouter({ |
1 | <router-link to="/login/12/zs"></login> |
要输出到页面上的化,需要在模板对象上面添加变量显示出来
1 | var login = { |
路由嵌套
通过children属性来进行路由嵌套,不过在route属性中的children属性中,添加的path对象的路径不能添加/。
子路由的path前面不要带/。否则永远以根路径开始请求,这样不方便我们用户去理解URL地址
使用命名视图实现经典视图
1 | <!-- 直接给每一个坑取一个name属性,然后显示相应属性名字的组件,没有的就显示default的组件 --> |
直接用三个占位符来分别展示不同组件,从而实现命名试图
1 | var router = new VueRouter({ |