Я получаю неопределенный за
это. $ маршрутизатор
не определено в App.vue и других компонентах. Я не мог найти решение.
здесь часть моего main.js
Vue.use(VueRouter);
Vue.use(VueResource);
const router = new VueRouter({
routes: Routes,
mode: 'history'
});
new Vue({
el: '#app',
render: h => h(App),
router
});
и вот мой router.js, который я импортирую в main.js.
export default [
{path: '/', component: Home, name: 'home'},
{path: '/home', component: Home, name: 'home2'},
{path: '/user/login', component: Login, name: 'userLogin'}
];
Спасибо :)
Я использовал это в тегах сценария, как это,
<script>
import HeadNavBar from './components/HeadNavBar.vue';
import SideBarNav from './components/SideBarNav.vue';
import Home from './components/Home.vue';
console.log(this.$router,pus); //the undefined type
export default {
name: 'app',
data() {
return {
isLogin: true
}
},
components: {
'app-headnav': HeadNavBar,
'app-sidebarnav': SideBarNav,
'app-home': Home
}
}
</script>
но когда я переместил его в раздел методов, я получил ответ, который хотел.
export default {
name: 'app',
data() {
return {
isLogin: true
}
},
components: {
'app-headnav': HeadNavBar,
'app-sidebarnav': SideBarNav,
'app-home': Home
},methods: {
myFunc: function() {
console.log(this.$router,pus); // this gave result
}
}
}
Я могу воспроизвести только undefined
ошибку для this.$router
при использовании функции со стрелкой (возможно, то, что вы делаете), которую рекомендует документация Vue:
Не используйте функции стрелок в свойстве опций или в
created:() => console.log(this.a)
, например,created:() => console.log(this.a)
илиvm.$watch('a', newValue => this.myMethod())
. Поскольку функции стрелок связаны с родительским контекстом,this
не будет экземпляр Vue, как вы ожидаете, что часто приводит к ошибкам, таким какUncaught TypeError: Cannot read property of undefined
илиUncaught TypeError: this.myMethod is not a function
.
Вот пример mounted
обратного вызова, который успешно регистрирует this.$router
:
<script>
export default {
name: 'app',
// DON'T USE ARROW FUNCTIONS HERE
// mounted: () => {
// console.log({router: this.$router});
// },
mounted() {
console.log({router: this.$router});
}
}
</script>
console.log(this.$router,pus)
над export
выполняется при импорте компонента. Это произошло до того, как компонент был создан. Так this
просто пустой объект {}
.
Вы должны получить this.$router
внутри методов объекта экспорта.
мы имеем такую же ошибку, в этом случае я исправил это, я просто импортирую файлы маршрутизатора в свой компонент, как это, и он работает:
импортировать файлы/конфигурации маршрутизатора в моем компоненте:
import router from '../router'
и я могу использовать это следующим образом:
router.replace('home')
и это должно работать
мой полный код:
<script>
import router from '../router'
export default {
methods: {
signIn: function () {
firebase
.auth().signInWithEmailAndPassword(this.email, this.password).then(
function (user) {
router.replace('home')
},
function (err) {
alert('Maaf, ' + err.message)
}
)
}
}
}
</script>
Я знаю, что это старо, но я собираюсь поделиться чем-то, с чем столкнулся, и как я обойду его, если кто-то изо всех сил пытается там.
Мой сценарий - проект vue/meteor.
В функциях/обработчиках "this" относится к целевой функции, поэтому это. $ Router ищет $ router внутри функции или самой цели.
///////DOESN'T WORK ///////////
mounted: function () {
$(document).on('click', '.element', function(){
//this is recognized as
this.$router.push(PATH)
});
},
////////THIS WORKS//////////
mounted: function () {
//make router defined outside of function.
var navigate = this.$router;
$(document).on('click', '.element', function(){
navigate.push(PATH)
});
}
this
(возможно, вы используете функцию стрелки). Пожалуйста, обновите вопрос, чтобы показать больше контекста, чтобы помочь устранить проблему.