Как в Vue js передать bind props дочернему компоненту через через роутинг?

Помогите разобраться, как можно передать bind props данные в компонент, используя vue-router?
В документации приведены примеры со статическими данными https://router.vuejs.org/ru/essentials/passing-pro...
А как передавать v-bind: props используя vue-router?
Так чтобы при изменении свойства в data() родительского компонента, оно автоматически менялось в дочернем?

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>MATRESHKA</title>

	<link rel="stylesheet" href="css/sasha-style.css">
	<link rel="stylesheet" href="css/planing.css">

<script src="https://unpkg.com/vue"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.3.4/vue-resource.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-filter/0.2.1/vue-filter.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.min.js"></script>

</head> 

<body>


<div id="root">

	 
		  <h3>Список городов: </h3>
		  <p @click="setCityId(1)">Москва</p>
		  <p @click="setCityId(2)">Берлин</p>
		  <p @click="setCityId(3)">Дели</p>

		  <p @click="getCityId">Посмотреть ID города</p>


		   <h3>Ссылки на другие разделы:</h3>
		   <p>
		    <router-link to="/plan">Plan</router-link>
		    <router-link to="/city">City</router-link>		
		  </p>


	  <router-view></router-view>
</div>

<b>JS</b>
<script src="main.js"></script>


</body>
</html>


// --- ОПРЕДЕЛЯЕМ КОМПОНЕНТЫ

// 
const Plan = {
    name:'Plan',
    data () {
        return {
            title: 'Раздел план',
        }
    },   
    template:`
        <div>
            <h3>{{title}}</h3>              
        </div>`

}

// компонент город - здесь компонет получает ID города от родителя через props
const City = {
    name:'City',
    props:['cityid'],
    data () {
        return {
            title: 'Раздел город',
        }
    },  
    methods:{
        // здесь будет обращение к внешнему API 
        // в зависимости от ID города будут выводиться данные
    }, 
    template:`
        <div>
            <h3>{{title}}</h3>  
            <p> ID города: {{ cityid }} </p>    <!-- Сейчас это свойство здесь не выводиться -->        
        </div>`
}


// определяем пути
const routes = [
      { path:'/plan', component: Plan },
      { path: '/city', component: City,  props: true}
]

// создаем экземпляр роутера
const router = new VueRouter({
  routes
});

// создаем экземпляр корневого компонента
const app = new Vue({
      name: 'Родительский элемент',
      el: '#root',
      router,
      data() { 
        return  {
            title: "Родительский компонент",
            // получает значение ID при клике на название города, по умолчанию false
            cityid: false,          
        }
      },
      methods:{
        setCityId:function(ID){
            this.cityid = ID;
        },
        getCityId:function() {
            if(this.cityid != false){
                console.log('ID города - ' + this.cityid);
            }else{
                console.log('Вы не указали город');
            }            
        }
      }
}).$mount('#root');
  • Вопрос задан
  • 2867 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Вариант первый. Роут city определяем так:

{ path: '/city', component: City, props: () => ({ cityid: app.cityid }) }

Вариант второй. Передаём параметр через router-view:

<router-view :cityid="cityid"></router-view>

Одно непонятно - чем вас не устраивает нормальное решение? Добавить в маршрут динамический сегмент и затем передавать его в компонент маршрута как параметр. Например, так.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Вот из доки:
<router-link :to="{ path: '/city', params: { cityid: 123 }}">City</router-link>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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