我有一个简单的Vue应用程序:
const Home = { template: '<div>Home</div>' }
const Bar = {
methods: {
bar () {
alert('bar')
this.$emit('test')
}
},
template: `
<div>
<button @click="bar()">Bar</button><br/>
<router-link @click.native="bar()" to="/">Home</router-link>
</div>
`
}
const Foo = {
components: { Bar },
methods: {
foo () {
alert('foo')
}
},
template: '<Bar @test="foo()" />'
}
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/', component: Home },
{ path: '/foo', component: Foo }
]
})
new Vue({ router, el: '#app' })
https://jsfiddle.net/tqp5yc6z/5/
通过单击Bar
组件中的Bar
按钮,将出现两个带有bar
和foo
文本的警报。那是预期的行为。
但是,通过单击Home
组件中的Bar
链接,将只有一个带有bar
文本的警报,尽管{{1} }方法将被执行。我想知道为什么会这样吗?
答案 0 :(得分:0)
这是因为test
组件在发出bar
事件之前已被销毁。
最好的解决方案是将Foo
替换为test
的{{1}}:
<router-link @click.native="bar()" to="/">Home</router-link>