Каким образом можно реализовать vk-подобную маршрутизацию?
То есть site.ru/id*** = компонент Profile, site.ru/group*** = компонент Group
new Router({
  // ...
  routes: [
    {
      path: '/(id):id',
      name: 'Profile',
      component: Profile,
    },
    {
      path: '/(group):groupId',
      name: 'Group',
      component: Group,
    },
  ],
});а главная страница меняется в зависимости от того, авторизован ли пользователь. То есть, если авторизован, то site.ru = Dashboard, а если нет, то Landing.
// Home.vue
<Dashboard v-if="isAuth" />
<Landing v-else /> 
  
  В хуке App.vue выглядит не очень уместно, хочется вынести эту логику в другое место.
Почему я не могу блокировать загрузку приложения до выполнения нужного мне действия (запрос на апи, возврат ответа и наполнение стора)?
store.dispatch('получитьДанные').then(() => {
  new Vue({
    el: '#app',
    store,
    router,
    ...<div v-if="данные в хранилище есть">
  основной контент приложения
</div>
<div v-else>
  данные загружаются, надо подождать
</div> 
  
   
  
   
  
   
  
  SET_USER(state, payload = {}) {
  Object.assign(state, payload)
}props: {
  siteWide: {
    type: Boolean,
    default: false,
  }
},
computed: {
  siteWidePath() {
    return this.siteWide ? ';path=/' : '';
  }
}const api = {
  async getData() {
    return {name: 'Foo', email: 'foo@bar.com'};
  }
}
new Vue({
  el:'#app',
  template: `<div v-if="current">
    <input v-model="current.name" />
    <input v-model="current.email" />
    <button :disabled="!isChanged">submit</button>
  </div>`,
  data() {
    return {
      original: null,
      current: null,
    }
  },
  async created() {
    const data = await api.getData();
    this.original = JSON.stringify(data);
    this.current = data;
  },
  computed: {
    isChanged() {
      return JSON.stringify(this.current) !== this.original;
    }
  }
});<input type="text" v-model="name" @input="name_changed = true"> 
  
  проблема в том, что видимо когда по первому запросу поле name заполняется, соответственно поле name_changed становится равно true и кнопка сохранения получается изначально доступна
watch:{ name(val, old){ this.name_changed = true; } }
this.$watch('name', () => this.name_changed = true);