在标签上绑定click事件,当事件内直接写表达式时,报错
当click事件绑定一个方法时,就可以正常跳转路由
是因为针对标签和方法编译时期的不同吗?
在标签上绑定click事件,当事件内直接写表达式时,报错
当click事件绑定一个方法时,就可以正常跳转路由
是因为针对标签和方法编译时期的不同吗?
在 Vue 模板中直接写表达式时,上下文环境与组件方法不同:
router
并没有挂载到组件实例的根属性上正确写法应该选择:
<!-- 方式1:使用组件方法 -->
<button @click="handleClick">跳转</button>
<!-- 方式2:显式使用 $router(模板中) -->
<button @click="$router.push('/')">跳转</button>
本质原因是 Vue 的模板编译机制:
建议采用第二种写法时注意:
因为没有 this
,像下面这样调整一下就好了。
- <el-dropdown-item icon="el-icon-setting" @click.native="this.$router.push('/user-info')" />
+ <el-dropdown-item icon="el-icon-setting" @click.native="$router.push('/user-info')" />
但是OP你既然知道在 template
里面绑定 click
时去掉了 this
,但是使用 $router
的时候没有去掉呢?
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
2 回答4.1k 阅读✓ 已解决
4 回答4.6k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
4 回答2k 阅读✓ 已解决
因为直接在标签上使用内联表达式时,Vue 会在特定上下文中编译这个表达式,而在这个上下文中
this
可能不是组件实例。改成了使用
@click.native="click"
并在方法中定义click()
函数,然后在函数内部使用this.$router.push('/user-info')
,这样是可以正常工作的。因为在方法中,this
正确地指向了组件实例,所以可以访问到$router
属性。如果确实想使用内联表达式,可以使用箭头函数来保持
this
的正确引用: