.sync和v-model区别
.sync
1、
以前是父组件绑定一个值,然后通过props传给子组件,子组件需要修改时候,子组件触发$emit方法,提交给父组件进行修改。操作如下:
this.$emit('update:title', newTitle)
然后父组件可以监听那个事件并根据需要更新一个本地的数据属性。例如:
<text-document v-bind:title="doc.title" v-on:update:title="doc.title = $event"></text-document>
为了方便起见,我们为这种模式提供一个缩写,即 .sync 修饰符,当子组件props发生改变之后,自动同步到父组件:
<text-document v-bind:title.sync="doc.title"></text-document>
2、当要用一个对象指定多个props的时候,可以使用.sync修饰符。例如
<text-example v-bind.sync="obj">
此时,obj里面的属性都会被当成独立的props传递下去
3、.sync修饰符的v-bind不能和表达式一起用,例如
<text-example v-bind:title.sync="obj.name + '!' ">
vue-router的对象属性
$route.path
类型: string
字符串,对应当前路由的路径,总是解析为绝对路径,如 “/foo/bar”。
$route.params
类型: Object
一个 key/value 对象,包含了动态片段和全匹配片段,如果没有路由参数,就是一个空对象。
$route.query
类型: Object
一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,如果没有查询参数,则是个空对象。
$route.hash
类型: string
当前路由的 hash 值 (带 #) ,如果没有 hash 值,则为空字符串。
$route.fullPath
类型: string
完成解析后的 URL,包含查询参数和 hash 的完整路径。
$route.matched
类型: Array
一个数组,包含当前路由的所有嵌套路径片段的路由记录 。路由记录就是 routes 配置数组中的对象副本 (还有在 children 数组)。
const router = new VueRouter({
routes: [
// 下面的对象就是路由记录
{ path: '/foo', component: Foo,
children: [
// 这也是个路由记录
{ path: 'bar', component: Bar }
]
}
]
})
当 URL 为 /foo/bar,$route.matched 将会是一个包含从上到下的所有对象 (副本)。
$route.name
当前路由的名称,如果有的话。(查看命名路由)
$route.redirectedFrom
如果存在重定向,即为重定向来源的路由的名字。(参阅重定向和别名)
路由生命周期
触发顺序为:
全局路由对象route -》 单独路由配置 -》 组件内部路由
1、beforeEach (route)
2、beforeRouterUpdate (组件内)
3、beforeEnter (单独路由配置)
4、
4.1 beforeRouterEnter (组件内)
4.1 beforeRouterUpdate
4.2 beforeRouterLeave
5、beforeResolve (route)
6、afterEach (route)
beforeRouterEnter 的this不能使用,怎么解决
beforeRouterEnter钩子函数的时候,组件被未被创建,所以获取不到组件实例的this
利用next()的回调函数,例如:
beforeRouterEnter(to,from,next){
next( vm => {
vm.data //组件里的data
})
}
$matched(面包屑)是什么?
路由导航条,如下
主页 >栏目页>文章页面
目的就是提供访问深度导航地址
什么是hashchange监听函数
页面url中hash部分发生变化的时候执行的函数