Я пытаюсь заставить Vue работать в MeteorJS с машинописными и одиночными файловыми компонентами.К сожалению, это не работает.Я считаю, что это как-то связано с тем, что в App.vue не установлено свойство $ route.Вот мой startup.ts
файл.Он создает div и монтирует основное приложение:
import Vue from "vue";
import VueRouter from "vue-router";
Vue.use(VueRouter);
import App from "../imports/App.vue"
//create div to mount app
var appDiv = document.createElement("div")
appDiv.id = "app"
document.body.appendChild(appDiv)
//mount app
var AppVue = Vue.extend(App)
var mainApp = new AppVue();
mainApp.$mount("#app")
App.vue очень прост:
<template>
<div>
<router-view class="view"></router-view>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import VueRouter from "vue-router";
Vue.use(VueRouter);
import router from "./startup/router";
import LoginPage from "./client/users/pages/LoginPage/LoginPage.vue"
export default new Vue({
router: new VueRouter({
routes: [{
name: "Login",
path: "/login",
component: new Vue({
render: function (createElement) {
return createElement("p", "Login")
}
})
}]
})
})
</script>
MeteorJS использует commonJS, поэтому мне пришлось использовать allowSyntheticDefaultImports
и esModuleInterop
чтобы это заработало.Я не знаю, вызывает ли это проблемы.Вот мой цконфиг.
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"sourceMap": true
}
}
Это дает мне эту ошибку: "TypeError: Cannot read property 'matched' of undefined"
Просмотр кода показывает мне, что он сталкивается с этой ошибкой при попытке рендеринга.Конкретный код пытается получить parent.$route
, где parent - это компонент App.Однако по какой-то причине приложение не имеет $route
свойства!Если кто-нибудь знает, как это исправить, мы будем очень признательны.