Как щелкнуть пользователя и отобразить сведения о пользователе в другом компоненте / представлении с помощью маршрутизатора Vuejs?

#javascript #vue.js #vuejs2 #axios #vue-router

#javascript #vue.js #vuejs2 #аксиос #vue-маршрутизатор

Вопрос:

Я делаю проект с помощью Vuejs, и мне нужно следующее:

  • Используйте API и извлеките список пользователей (только имена пользователей) на домашней странице.
  • Создайте пользовательский фильтр поиска для поиска пользователей по имени.
  • При нажатии на имя пользователя мне нужно перенаправить на другой компонент и вывести данные этого пользователя в этом компоненте (только данные пользователя, на которого я нажал).).

Я выполнил первые две задачи. Однако я понятия не имею, как выполнить другую третью задачу. Я читал документацию для vue-router, но я не могу в этом разобраться.

Я использовал axios для получения списка пользователей и jsonplaceholder.

Компонент списка пользователей:

 <template>
  <div>
    <!-- List Rendering the response data stored in posts[] array -->
    <b-input id="inline-form-input-name" class="my-3 col-10 col-sm-10 col-md-4 col-lg-4" type="text" v-model="searchUsers" placeholder="Search Users..."
    ></b-input>
    <h2>Our users:</h2>
    <div v-for="user in filteredUsers" :key="user.id">
      <p v-b-tooltip.hover.right='"Click on user to know more"' class="users pr-2"><span>{{ user.id }}</span> - {{ user.name }}</p>
    </div>
  </div>
</template>

<script>

// import axios
import axios from 'axios'

export default {
  name: 'UsersList',
  data() {
    return {
      users: [],
      searchUsers: ''
    }
  },
  computed: {
    // custom search box for user names
    filteredUsers() {
      return this.users.filter(user => {
        return user.name.match(this.searchUsers)
      })
    }
  },
  // life cycle hook - calls axios
  created(){
    axios.get('https://jsonplaceholder.typicode.com/users').then(response => {
      console.log(response.data)
      this.users = response.data
      // console.log an error if get() method is unsuccessful
    }).catch(err => {
      console.log(err)
    })
  },
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">

.users {
  cursor: pointer;
  display: inline-block;
}
</style>
 

Имя компонента списка пользователей UserList.vue

Мне нужно вывести сведения о пользователе в этом компоненте, который называется UsersDetails.vue

 <template>
    <div class="user-details-wrapper">
        <h1>I am the user details component</h1>
    </div>
</template>


<script>
export default {
    name: 'UserDetails',
    data(){
        return {

        }
    },
}
</script>

<style lang="scss">

.user-details-wrapper {
    h1 {
        background: #000;
        color: #fff;
        padding: 10px;
        margin-top: 30px;
        display: inline-block;
    }
}

</style>
 

Скриншот список пользователей и пользовательский фильтр поиска

введите описание изображения здесь
введите описание изображения здесь


Любая помощь будет по-настоящему оценена!

Ответ №1:

Вы можете использовать динамическое сопоставление маршрутов

Добавить маршрут

 const router = new VueRouter({
  routes: [
    // dynamic segments start with a colon
    { path: '/user/:id', component: User }
  ]
})
 

Динамический сегмент обозначается двоеточием : При сопоставлении маршрута, значение динамических сегментов будет отображаться как this.$route.params в каждом компоненте.

При Single User component выполнении AJAX вызова в смонтированном

 mounted() {
    axios.get("https://jsonplaceholder.typicode.com/users/"   this.$route.params)
    .then(res => console.log(res))
}
 

Комментарии:

1. Вы действительно должны проверить документы как для Vue , так и для Vue router