Vue-Router возвращает & ldquo; Невозможно переопределить свойство: $ router & rdquo; ошибка

Инъекционная инъекция является одним из возможных решений, которые можно было бы назвать требованием «Зависимость обфускации». Зависимость Obfuscation - это метод принятия «очевидной» природы из процесса предоставления зависимости классу, который ее требует, и, следовательно, каким-то образом запутывает предоставление указанной зависимости указанному классу. Это не обязательно плохо. Фактически, путем запутывания способа предоставления зависимостям классу, то что-то вне класса отвечает за создание зависимости, что означает, что в разных сценариях может быть предоставлена ​​другая реализация зависимости, не внося никаких изменений к классу. Это отлично подходит для переключения между режимами производства и тестирования (например, с использованием зависимости «mock»).

К сожалению, плохая часть состоит в том, что некоторые люди предположили, что вам нужна специализированная структура для обфускации зависимостей и что вы как-то «менее» программист, если не хотите использовать определенную инфраструктуру для этого. Другим, чрезвычайно тревожным мифом, по мнению многих, является то, что инъекция зависимостей - единственный способ добиться запутывания зависимости. Это явно и исторически и, очевидно, на 100% неверно, но у вас возникнут проблемы с убеждением некоторых людей в том, что есть альтернативы инъекции зависимостей для требований обфускации зависимостей.

Программисты поняли, что потребность в обфускации зависит от лет и много альтернатив решения эволюционировали как до, так и после инъекции зависимостей. Существуют шаблоны Factory, но есть много вариантов с использованием ThreadLocal, где не требуется инъекции в конкретный экземпляр - зависимость эффективно вводится в поток, который имеет преимущество в том, чтобы сделать доступный объект (через удобные статические методы getter) до любой класс, который требует его, без необходимости добавлять аннотации к классам, которые его требуют, и создать сложный XML-клей, чтобы это произошло. Когда ваши зависимости требуются для настойчивости (JPA / JDO или что-то еще), это позволяет вам добиться «tranaparent persistence» намного проще и с классами модели домена и бизнес-модели, состоящими исключительно из POJO (т. Е. Никакой специфической структуры / блокировки в аннотациях).

0
задан Samuel chevarie 16 January 2019 в 18:24
поделиться

2 ответа

У вас есть копия вашего экземпляра Vue.

Проверьте это.

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

const Page1 = { template: '<div>Page1</div>' }
const Page2 = { template: '<div>Page2</div>' }

const routes = [
  { path: '/page1', component: Page1 },
  { path: '/page2', component: Page1 }
]

const router = new VueRouter({
  routes // short for `routes: routes`
})

const app = new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
0
ответ дан Yoarthur 16 January 2019 в 18:24
поделиться

Ваш основной экземпляр Vue дублируется:

new Vue({
  el: '#app',
  render: h => h(App)
})

и:

const app = new Vue({
  router
}).$mount('#app')

Я думаю, что это является источником проблемы. Я полагаю, это может выглядеть так:

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

const Page1 = { template: '<div>Page1</div>' }
const Page2 = { template: '<div>Page2</div>' }

const routes = [
  { path: '/page1', component: Page1 },
  { path: '/page2', component: Page1 }
]

const router = new VueRouter({
  routes // short for `routes: routes`
})

const app = new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
0
ответ дан Beniamin H 16 January 2019 в 18:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: