فهرست سرفصل‌های Vue
خانه (HOME) معرفی (Intro) دایرکتیوها (Directives) v-bind (v-bind) v-if (v-if) v-show (v-show) v-for (v-for) رویدادها (Events) v-on (v-on) متدها (Methods) تغییردهنده های رویداد (Event Modifiers) فرم ها (Forms) v-model (v-model) بایندینگ CSS (CSS Binding) ویژگی های محاسبه شده (Computed Properties) واچرها (Watchers) قالب ها (Templates) چرا، چگونه و راه اندازی (Why, How and Setup) اولین صفحه SFC (First SFC Page) کامپوننت ها (Components) پراپس (Props) کامپوننت های v-for (v-for Components) $emit() ($emit()) ویژگی های عبوری (Fallthrough) (Fallthrough Attributes) استایل Scoped (Scoped Styling) کامپوننت های محلی (Local Components) اسلات ها (Slots) v-slot (v-slot) اسلات های Scoped (Scoped Slots) کامپوننت های پویا (Dynamic Components) Teleport (Teleport) درخواست HTTP (HTTP Request) رفرنس های تمپلیت (Template Refs) هوک های چرخه عمر (Lifecycle Hooks) Provide/Inject (Provide/Inject) مسیریابی (Routing) ورودی های فرم (Form Inputs) انیمیشن ها (Animations) انیمیشن با v-for (Animations with v-for) بیلد (Build) Composition API (Composition API) ویژگی های توکار (Built-in Attributes) ویژگی 'is' ('is' Attribute) ویژگی 'key' ('key' Attribute) ویژگی 'ref' ('ref' Attribute) کامپوننت های توکار (Built-in Components) <KeepAlive> (<KeepAlive>) <Teleport> (<Teleport>) <Transition> (<Transition>) <TransitionGroup> (<TransitionGroup>) المان های توکار (Built-in Elements) <component> (<component>) <slot> (<slot>) <template> (<template>) نمونه کامپوننت (Component Instance) $attrs ($attrs) $data ($data) $el ($el) $parent ($parent) $props ($props) $refs ($refs) $root ($root) $slots ($slots) $emit() ($emit()) $forceUpdate() ($forceUpdate()) $nextTick() ($nextTick()) $watch() ($watch()) دایرکتیوها (Directives) v-bind (v-bind) v-cloak (v-cloak) v-for (v-for) v-html (v-html) v-if (v-if) v-else-if (v-else-if) v-else (v-else) v-memo (v-memo) v-model (v-model) v-on (v-on) v-once (v-once) v-pre (v-pre) v-show (v-show) v-slot (v-slot) v-text (v-text) گزینه های نمونه (Instance Options) داده ها (data) متدها (methods) محاسبه شده ها (computed) watch (watch) پراپس (props) emits (emits) expose (expose) هوک های چرخه عمر (Lifecycle Hooks) beforeCreate (beforeCreate) created (created) beforeMount (beforeMount) mounted (mounted) beforeUpdate (beforeUpdate) updated (updated) beforeUnmount (beforeUnmount) unmounted (unmounted) errorCaptured (errorCaptured) renderTracked (renderTracked) renderTriggered (renderTriggered) activated (activated) deactivated (deactivated) serverPrefetch (serverPrefetch) مثال ها (Examples) تمرین ها (Exercises) کوییز (Quiz) سیلابس (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
Vue

Vue — مسیریابی (Routing)

آخرین بروزرسانی: 1404/08/21

مسیریابی (Routing)

«مسیریابی (Routing)» یعنی جابه جایی بخش های برنامه تک صفحه ای. صفحه کامل رفرش نمی شود. پس تجربه سریع تر می شود؛ مثل عوض کردن تب های گوشی.

درک مسیریابی با کامپوننت پویا

اول ساده نگاه کنیم. یک «کامپوننت پویا (Dynamic Component)» بین دو بخش جابه جا می شود. اما لینک مستقیمی برای هر بخش نداریم.

<template>
  <p>Choose what part of this page you want to see:</p>
  <button @click="activeComp = 'animal-collection'">Animals</button>
  <button @click="activeComp = 'food-items'">Food</button><br>
  <div>
    <component :is="activeComp"></component>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeComp: ''
    };
  }
};
<\/script>

<style scoped>
  button {
    padding: 5px;
    margin: 10px;
  }
  div {
    border: dashed black 1px;
    padding: 20px;
    margin: 10px;
    display: inline-block;
  }
<\/style>

مشاهده در ادیتور

از کامپوننت پویا تا مسیریابی Vue

در SPA فقط یک فایل HTML داریم. بنابراین لینک جدا نداریم. با «مسیریابی Vue» هر بخش آدرس مخصوص می گیرد؛ مثل /food یا /animals.

1) نصب کتابخانه Vue Router

npm install vue-router@4

مشاهده در ادیتور

2) ساخت Router در main.js

یک «روتر (Router)» می سازیم. سپس مسیرها را تعریف می کنیم. تاریخچه مرورگر هم مدیریت می شود.

import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import App from './App.vue';
import FoodItems from './components/FoodItems.vue';
import AnimalCollection from './components/AnimalCollection.vue';
const router = createRouter({
  history: createWebHistory();
  routes: [
    { path: '/animals', component: AnimalCollection };
    { path: '/food', component: FoodItems };
  ];
});
const app = createApp(App);
app.use(router);
app.mount('#app');

مشاهده در ادیتور

3) استفاده از <router-view>

حالا خروجی روتر باید جایی رندر شود. به جای کامپوننت پویا، از <router-view> استفاده کن.

<template>
  <p>Choose what part of this page you want to see:</p>
  <button @click="activeComp = 'animal-collection'">Animals</button>
  <button @click="activeComp = 'food-items'">Food</button><br>
  <div>
    <router-view></router-view>
  </div>
</template>

مشاهده در ادیتور

4) لینک سازی با <router-link>

دکمه ها را با «روتر لینک (router-link)» عوض کن. دیگر state اضافی نمی خواهیم.

<template>
  <p>Choose what part of this page you want to see:</p>
  <router-link to="/animals">Animals</router-link>
  <router-link to="/food">Food</router-link><br>
  <div>
    <router-view><\/router-view>
  <\/div>
<\/template>

مشاهده در ادیتور

5) استایل دهی لینک فعال

روتر به لینک فعال کلاس می دهد. می توانی استایل ویژه بدهی.

<template>
  <p>Choose what part of this page you want to see:</p>
  <router-link to="/animals">Animals</router-link>
  <router-link to="/food">Food</router-link><br>
  <div>
    <router-view><\/router-view>
  <\/div>
<\/template>

<style scoped>
  a {
    display: inline-block;
    background-color: black;
    border: solid 1px black;
    color: white;
    padding: 5px;
    margin: 10px;
  }
  a:hover,
  a.router-link-active {
    background-color: rgb(110, 79, 13);
  }
  div {
    border: dashed black 1px;
    padding: 20px;
    margin: 10px;
    display: inline-block;
  }
<\/style>

مشاهده در ادیتور

نکته: مسیریابی داخل مرورگر انجام می شود. بنابراین جابه جایی سریع می ماند.

پیوندهای مفید

مسیریابی Vue | Provide/Inject | هوک های چرخه عمر

جمع بندی سریع

  • SPA یعنی یک HTML و مسیرهای زیاد.
  • <router-view> خروجی مسیرها را نشان می دهد.
  • <router-link> لینک تمیز و تاریخچه می دهد.
  • هر مسیر، کامپوننت مخصوص دارد.