Отображается предупреждение, поскольку ссылка на loginNewUser
указана в компоненте Home
:
<Register msg="Otherwise, go ahead and register here:" @login-user="loginNewUser"/>
Однако loginNewUser
определяется не в компоненте Home
, а в вашем файле main.js
, который на три уровня выше в иерархии компонентов: main.js > App.vue > Home.vue
new Vue({
router,
store,
render: h => h(App),
methods: {
loginNewUser(user) {
// existing code here
}
}
}).$mount("#app");
Решение № 1
Чтобы решить эту проблему, вы должны передать обработчик событий из вашего main.js
в ваш Home
компонент, который включает 3 шага.
Сначала , передайте обработчик события в App.vue
, изменив функцию render
в main.js
из:
render: h => h(App)
на это:
render: function(createElement) {
return createElement(App, {
on: {
loginNewUser: this.loginNewUser
}
})
}
h
является более обобщенной версией createElement
, поэтому в основном они одинаковы.
createElement
принимает несколько аргументов, и мы будем использовать second
аргумент, который
является объектом данных для передачи обработчиков event
визуализированному компоненту.
Второй , в вашем App
компоненте, определите loginNewUser
и передайте ссылку на router-view
.
export default {
name: "App",
methods: {
loginNewUser() {
this.$emit('loginNewUser');
}
}
}
<router-view @login-new-user="loginNewUser"></router-view>
Третий , определите loginNewUser
в вашем Home.vue
компоненте.
export default {
name: "home",
components: {
Login,
Register
},
methods: {
loginNewUser() {
this.$emit('loginNewUser');
}
}
};
И, наконец, , в своем текущем коде не забудьте изменить :login-user
на @login-user
.
Решение № 2
Если вы используете Vuex
или планируете вместо того, чтобы передавать обработчик событий сверху вниз, вы можете использовать actions
, который вы можете вызывать в любом месте ваших компонентов.