diff --git a/docs/en/advanced/navigation-guards.md b/docs/en/advanced/navigation-guards.md index a9efe15a2..5817b4d6f 100644 --- a/docs/en/advanced/navigation-guards.md +++ b/docs/en/advanced/navigation-guards.md @@ -77,7 +77,7 @@ These guards have the exact same signature as global before guards. Finally, you can directly define route navigation guards inside route components (the ones passed to the router configuration) with the following options: - `beforeRouteEnter` -- `beforeRouteUpdate` (added in 2.2) +- `beforeRouteUpdate` (added in 2.2+) - `beforeRouteLeave` ``` js diff --git a/docs/en/essentials/navigation.md b/docs/en/essentials/navigation.md index 7c421e938..03d79b0ea 100644 --- a/docs/en/essentials/navigation.md +++ b/docs/en/essentials/navigation.md @@ -30,8 +30,7 @@ router.push({ name: 'user', params: { userId: 123 }}) router.push({ path: 'register', query: { plan: 'private' }}) ``` -**Note**: `params` are ignored if a `path` is provided, which is not the case for `query`, as shown in the example above. -Instead, you need to provide the `name` of the route or manually specify the whole `path` with any parameter: +**Note**: `params` are ignored if a `path` is provided, which is not the case for `query`, as shown in the example above. Instead, you need to provide the `name` of the route or manually specify the whole `path` with any parameter: ```js const userId = 123 diff --git a/docs/fr/SUMMARY.md b/docs/fr/SUMMARY.md index 49acb21bf..1cc1d5710 100644 --- a/docs/fr/SUMMARY.md +++ b/docs/fr/SUMMARY.md @@ -2,7 +2,7 @@ > Note: vue-router@2.x fonctionne uniquement avec Vue 2.x. La doc pour la 0.7.x est [ici](https://github.com/vuejs/vue-router/tree/1.0/docs/en). -**[Notes de release](https://github.com/vuejs/vue-router/releases)** +**[Notes de version](https://github.com/vuejs/vue-router/releases)** - [Installation](installation.md) - Essentiel @@ -13,12 +13,12 @@ - [Routes nommées](essentials/named-routes.md) - [Vues nommées](essentials/named-views.md) - [Redirection et alias](essentials/redirect-and-alias.md) - - [Passing Props to Route Components (En)](essentials/passing-props.md) - - [HTML5 History Mode (En)](essentials/history-mode.md) + - [Passage de props aux composants de route](essentials/passing-props.md) + - [Mode historique de HTML5](essentials/history-mode.md) - Avancé - - [Navigation Guards (En)](advanced/navigation-guards.md) - - [Route Meta Fields (En)](advanced/meta.md) - - [Transitions (En)](advanced/transitions.md) + - [Intercepteurs de navigation](advanced/navigation-guards.md) + - [Champs meta de route](advanced/meta.md) + - [Transitions](advanced/transitions.md) - [Récupération de données](advanced/data-fetching.md) - [Comportement du défilement](advanced/scroll-behavior.md) - [Chargement à la volée](advanced/lazy-loading.md) diff --git a/docs/fr/advanced/data-fetching.md b/docs/fr/advanced/data-fetching.md index 98f3bea71..8ff6c4072 100644 --- a/docs/fr/advanced/data-fetching.md +++ b/docs/fr/advanced/data-fetching.md @@ -4,7 +4,7 @@ Parfois vous avez besoin de récupérer des données depuis le serveur lorsqu'un - **Récupération de donnée après la navigation** : effectue la navigation en premier, et récupère les données dans le hook entrant du cycle de vie d'un composant. Affiche un état de chargement pendant que les données sont en train d'être récupérées. -- **Récupération de donnée avant la navigation** : récupère les données avant la navigation dans la fonction de sécurisation d'entrée de la route, et effectue la navigation après que les données aient été récupérées. +- **Récupération de donnée avant la navigation** : récupère les données avant la navigation dans la fonction d'interception d'entrée de la route, et effectue la navigation après que les données aient été récupérées. Techniquement, les deux choix sont valides. Cela dépend de l'expérience utilisateur que vous souhaitez apporter. @@ -71,7 +71,7 @@ export default { ## Récupération de données avant la navigation -Avec cette approche, nous récupérerons les données avant de naviguer vers la nouvelle route. Nous pouvons effectuer la récupération de données dans la fonction de sécurisation `beforeRouteEnter` du composant à venir, et seulement appeler `next` lorsque la récupération est terminée : +Avec cette approche, nous récupérerons les données avant de naviguer vers la nouvelle route. Nous pouvons effectuer la récupération de données dans la fonction d'interception `beforeRouteEnter` du composant à venir, et seulement appeler `next` lorsque la récupération est terminée : ``` js export default { diff --git a/docs/fr/advanced/meta.md b/docs/fr/advanced/meta.md index 998b6c134..f4664eceb 100644 --- a/docs/fr/advanced/meta.md +++ b/docs/fr/advanced/meta.md @@ -1,6 +1,6 @@ -# Route Meta Fields (En)

*Cette page est en cours de traduction française. Revenez une autre fois pour lire une traduction achevée ou [participez à la traduction française ici](https://github.com/vuejs-fr/vue-router).* +# Champs meta de route -You can include a `meta` field when defining a route: +Vous pouvez inclure un champ `meta` quand vous définissez une route : ``` js const router = new VueRouter({ @@ -12,7 +12,7 @@ const router = new VueRouter({ { path: 'bar', component: Bar, - // a meta field + // un champ `meta` meta: { requiresAuth: true } } ] @@ -21,21 +21,21 @@ const router = new VueRouter({ }) ``` -So how do we access this `meta` field? +Comment maintenant accéder à ce champ `meta` ? -First, each route object in the `routes` configuration is called a **route record**. Route records may be nested. Therefore when a route is matched, it can potentially match more than one route record. +Tout d'abord, chaque objet route dans la configuration de `routes` est appelé un **registre de route**. Les registres de route peuvent être imbriqués. Par conséquent, quand une route concorde, elle peut potentiellement concorder avec plus d'un registre de route. -For example, with the above route config, the URL `/foo/bar` will match both the parent route record and the child route record. +Par exemple, avec la configuration de route ci-dessous, l'URL `/foo/bar` va concorder avec le registre parent et le registre enfant. -All route records matched by a route are exposed on the `$route` object (and also route objects in navigation guards) as the `$route.matched` Array. Therefore, we will need to iterate over `$route.matched` to check for meta fields in route records. +Tous les registres concordant avec une route sont exposés dans l'objet `$route` (ainsi que les objets de route dans les sécurisations de navigation) dans le tableau `$route.matched`. Donc, nous devons itérer à travers `$route.matched` pour vérifier les champs meta dans les registres de route. -An example use case is checking for a meta field in the global navigation guard: +Un exemple concret est la vérification d'un champ meta dans une interception de navigation globale : ``` js router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) { - // this route requires auth, check if logged in - // if not, redirect to login page. + // cette route demande une autorisation, vérifions si l'utilisateur est logué. + // sinon, redirigeons le sur la page de login. if (!auth.loggedIn()) { next({ path: '/login', @@ -45,7 +45,7 @@ router.beforeEach((to, from, next) => { next() } } else { - next() // make sure to always call next()! + next() // assurez vous de toujours appeler `next()` ! } }) ``` diff --git a/docs/fr/advanced/navigation-guards.md b/docs/fr/advanced/navigation-guards.md index 97dfb6903..4843a3d6c 100644 --- a/docs/fr/advanced/navigation-guards.md +++ b/docs/fr/advanced/navigation-guards.md @@ -1,12 +1,12 @@ -# Navigation Guards (En)

*Cette page est en cours de traduction française. Revenez une autre fois pour lire une traduction achevée ou [participez à la traduction française ici](https://github.com/vuejs-fr/vue-router).* +# Intercepteurs de navigation -As the name suggests, the navigation guards provided by `vue-router` are primarily used to guard navigations either by redirecting it or canceling it. There are a number of ways to hook into the route navigation process: globally, per-route, or in-component. +Comme le nom le suggère, l'interception de navigation fournie par `vue-router` est principalement utilisée pour intercepter la navigation avec des redirections ou des annulations d'accès. Il y a plusieurs hooks disponibles lors du processus de navigation : globaux, par route ou par composant. -Remember that **params or query changes won't trigger enter/leave navigation guards**. You can either [watch the `$route` object](../essentials/dynamic-matching.md#reacting-to-params-changes) to react to those changes, or use the `beforeRouteUpdate` in-component guard. +Souvenez-vous de cela : **le changement de paramètre ou de query ne va pas lancer d'interception d'entrée ou de sortie de navigation**. Vous pouvez toujours [observer l'objet `$route`](../essentials/dynamic-matching.md#reacting-to-params-changes) pour réagir à ces changements, ou utiliser la fonction `beforeRouteUpdate` d'une interception par composant. -### Global Guards +### Interception globale -You can register global before guards using `router.beforeEach`: +Vous pouvez abonner une interception d'entrée en utilisant `router.beforeEach` : ``` js const router = new VueRouter({ ... }) @@ -16,35 +16,35 @@ router.beforeEach((to, from, next) => { }) ``` -Global before guards are called in creation order, whenever a navigation is triggered. Guards may be resolved asynchronously, and the navigation is considered **pending** before all hooks have been resolved. +Les interceptions d'entrées globales sont appelées lors de l'ordre de création, chaque fois qu'une navigation est déclenchée. Les interceptions peuvent être résolues de manière asynchrone, et la navigation est considérée comme **en attente** avant que tous les hooks ne soient résolues. -Every guard function receives three arguments: +Chaque fonction d'interception reçoit trois arguments : -- **`to: Route`**: the target [Route Object](../api/route-object.md) being navigated to. +- **`to: Route`**: L'[objet `Route`](../api/route-object.md) cible vers lequel on navigue. -- **`from: Route`**: the current route being navigated away from. +- **`from: Route`**: la route courante depuis laquelle nous venons de naviguer. -- **`next: Function`**: this function must be called to **resolve** the hook. The action depends on the arguments provided to `next`: +- **`next: Function`**: cette fonction doit être appelée pour **résoudre** le hook. L'action dépend des arguments fournis à `next`: - - **`next()`**: move on to the next hook in the pipeline. If no hooks are left, the navigation is **confirmed**. + - **`next()`**: se déplacer jusqu'au prochain hook du workflow. S'il ne reste aucun hooks, la navigation est **confirmée**. - - **`next(false)`**: abort the current navigation. If the browser URL was changed (either manually by the user or via back button), it will be reset to that of the `from` route. + - **`next(false)`**: annuler la navigation courante. Si l'URL du navigateur avait changé (manuellement par l'utilisateur ou via le bouton retour du navigateur), il sera remis à sa valeur de route de `from`. - - **`next('/')` or `next({ path: '/' })`**: redirect to a different location. The current navigation will be aborted and a new one will be started. + - **`next('/')` ou `next({ path: '/' })`**: redirige vers le nouvel URL. La navigation courante va être arrêtée et une nouvelle va se lancer. - - **`next(error)`**: (2.4.0+) if the argument passed to `next` is an instance of `Error`, the navigation will be aborted and the error will be passed to callbacks registered via `router.onError()`. + - **`next(error)`**: (2.4.0+) si l'argument passé à `next` est une instance de `Error`, la navigation va s'arrêter et l'erreur sera passée aux fonctions de rappel via `router.onError()`. -**Make sure to always call the `next` function, otherwise the hook will never be resolved.** +**Assurez-vous de toujours appeler la fonction `next`, sinon le hook ne sera jamais résolu.** -### Global Resolve Guards +### Résolutions des interceptions globales -> New in 2.5.0 +> Nouveau dans la 2.5.0 -In 2.5.0+ you can register a global guard with `router.beforeResolve`. This is similar to `router.beforeEach`, with the difference that resolve guards will be called right before the navigation is confirmed, **after all in-component guards and async route components are resolved**. +Dans la 2.5.0+ vous pouvez abonner une interception globale avec `router.beforeResolve`. Ceci est similaire a `router.beforeEach`, mais la différence est qu'elle sera appelée juste après que la navigation soit confirmée, **après que toutes les interceptions par composants et les composants de route asynchrone ai été résolus**. -### Global After Hooks +### Hooks de sortie globaux -You can also register global after hooks, however unlike guards, these hooks do not get a `next` function and cannot affect the navigation: +Vous pouvez également abonner des hooks de sortie, cependant, à la différence des interceptions, ces hooks ne fournissent pas de fonction `next` et n'affecte pas la navigation : ``` js router.afterEach((to, from) => { @@ -52,9 +52,9 @@ router.afterEach((to, from) => { }) ``` -### Per-Route Guard +### Interception par route -You can define `beforeEnter` guards directly on a route's configuration object: +Vous pouvez définir la interception `beforeEnter` directement sur l'objet de configuration d'une route : ``` js const router = new VueRouter({ @@ -70,65 +70,65 @@ const router = new VueRouter({ }) ``` -These guards have the exact same signature as global before guards. +Ces interceptions ont exactement le même effet que les interceptions globales d'entrée. -### Sécurisation intra-composants +### Interception par composant -Finally, you can directly define route navigation guards inside route components (the ones passed to the router configuration) with the following options: +Enfin, vous pouvez directement définir une interception de navigation a l'intérieur du composant lui-même (celui passer à la configuration du routeur) avec les options suivantes : - `beforeRouteEnter` -- `beforeRouteUpdate` (added in 2.2) +- `beforeRouteUpdate` (ajouté dans la 2.2+) - `beforeRouteLeave` ``` js const Foo = { template: `...`, beforeRouteEnter (to, from, next) { - // called before the route that renders this component is confirmed. - // does NOT have access to `this` component instance, - // because it has not been created yet when this guard is called! + // appelée avant que la route vers le composant soit confirmée. + // cette fonction n'a pas accès à l'instance du composant avec `this`, + // car le composant n'a pas encore été créé quand cette interception est appelée ! }, beforeRouteUpdate (to, from, next) { - // called when the route that renders this component has changed, - // but this component is reused in the new route. - // For example, for a route with dynamic params /foo/:id, when we - // navigate between /foo/1 and /foo/2, the same Foo component instance - // will be reused, and this hook will be called when that happens. - // has access to `this` component instance. + // appelée quand la route qui fait le rendu de ce composant change, + // mais que ce composant est utilisé de nouveau dans la nouvelle route. + // Par exemple, pour une route avec le paramètre dynamique `/foo/:id`, quand nous + // naviguons entre `/foo/1` et `/foo/2`, la même instance du composant `Foo` + // va être ré-utilisée, et ce hook va être appelé quand cela arrivera. + // ce hook a accès à l'instance de ce composant via `this`. }, beforeRouteLeave (to, from, next) { - // called when the route that renders this component is about to - // be navigated away from. - // has access to `this` component instance. + // appelée quand la route qui fait le rendu de ce composant est sur le point + // d'être laissée en faveur de la prochaine route. + // elle a accès à l'instance de ce composant via `this`. } } ``` -The `beforeRouteEnter` guard does **NOT** have access to `this`, because the guard is called before the navigation is confirmed, thus the new entering component has not even been created yet. +L'interception `beforeRouteEnter` **n'**a **PAS** accès à `this`, car l'interception est appelée avant que la navigation soit confirmée, et le nouveau composant entrant n'a même pas encore été crée. -However, you can access the instance by passing a callback to `next`. The callback will be called when the navigation is confirmed, and the component instance will be passed to the callback as the argument: +Cependant, vous pouvez accéder à l'instance en passant dans la fonction de rappel `next`. Cette fonction de rappel va être appelée quand la navigation sera confirmée, et l'instance du composant sera passée à la fonction de rappel en tant qu'argument : ``` js beforeRouteEnter (to, from, next) { next(vm => { - // access to component instance via `vm` + // accès à l'instance du composant via `vm` }) } ``` -You can directly access `this` inside `beforeRouteLeave`. The leave guard is usually used to prevent the user from accidentally leaving the route with unsaved edits. The navigation can be canceled by calling `next(false)`. - -### The Full Navigation Resolution Flow - -1. Navigation triggered -2. Call leave guards in deactivated components -3. Call global `beforeEach` guards -4. Call `beforeRouteUpdate` guards in reused components (2.2+) -5. Call `beforeEnter` in route configs -6. Resolve async route components -7. Call `beforeRouteEnter` in activated components -8. Call global `beforeResolve` guards (2.5+) -9. Navigation confirmed. -10. Call global `afterEach` hooks. -11. DOM updates triggered. -12. Call callbacks passed to `next` in `beforeRouteEnter` guards with instantiated instances. +Vous pouvez directement accéder à `this` à l'intérieur de `beforeRouteLeave`. L'interception de sortie est utilisée pour empêcher l'utilisateur de quitter la route par accident alors qu'il n'a pas sauver ses modifications. La navigation peut être annulée en appelant `next(false)`. + +### Le flux de résolution de navigation complet + +1. La navigation est demandée. +2. Appel de la interception de sortie des composants désactivés (ceux que l'on va quitter). +3. Appel des interceptions globales `beforeEach`. +4. Appel des interceptions `beforeRouteUpdate` pour les composants ré-utilisés (2.2+). +5. Appel de `beforeEnter` dans la configuration de route. +6. Résolution des composants de route asynchrones. +7. Appel de `beforeRouteEnter` dans les composants activés (ceux où l'on va arriver). +8. Appel des interceptions `beforeResolve` (2.5+). +9. Confirmation de la navigation. +10. Appel des hooks globaux `afterEach`. +11. Modification du DOM demandées. +12. Appel des fonctions de rappel passées à `next` dans l'interception `beforeRouteEnter` avec l'instance instanciée. diff --git a/docs/fr/advanced/transitions.md b/docs/fr/advanced/transitions.md index d90dc45cc..e386deb23 100644 --- a/docs/fr/advanced/transitions.md +++ b/docs/fr/advanced/transitions.md @@ -1,4 +1,4 @@ -# Les transitions +# Transitions Vu que `` est essentiellement un composant dynamique, on peut lui appliquer certains effets de transitions en utilisant le composant `` : diff --git a/docs/fr/api/component-injections.md b/docs/fr/api/component-injections.md index c98415a6b..c9f020a8b 100644 --- a/docs/fr/api/component-injections.md +++ b/docs/fr/api/component-injections.md @@ -18,4 +18,4 @@ Ces propriétés sont injectées dans chacun des composants enfants, en passant - **beforeRouteUpdate** (ajouté en 2.2) - **beforeRouteLeave** - Voir la [Sécurisation intra-composants](../advanced/navigation-guards.md#securisation-intra-composants). + Voir l'[interception par composant](../advanced/navigation-guards.md#securisation-par-composant). diff --git a/docs/fr/api/route-object.md b/docs/fr/api/route-object.md index fb9696c34..50269c38b 100644 --- a/docs/fr/api/route-object.md +++ b/docs/fr/api/route-object.md @@ -1,6 +1,6 @@ # L'objet `Route` -Un **objet `Route`** représente l'état actuel de la route active. Il contient des informations analysées à propos de l'URL courante et **les itinéraires de route** appariés par l'URL. +Un **objet `Route`** représente l'état actuel de la route active. Il contient des informations analysées à propos de l'URL courant et **les itinéraires de route** appariés par l'URL. L'objet `Route` est immutable. Chaque navigation qui se déroule avec succès résultera en un nouvel objet `Route`. @@ -12,7 +12,7 @@ L'objet `Route` peut être trouvé à plusieurs endroits : - Comme valeur de retour après l'appel de `router.match(location)` -- À l'intérieur des fonctions de sécurisation de la navigation, dans les deux premiers paramètres de la fonction : +- À l'intérieur des fonctions d'interception de la navigation, dans les deux premiers paramètres de la fonction : ``` js router.beforeEach((to, from, next) => { @@ -60,7 +60,7 @@ L'objet `Route` peut être trouvé à plusieurs endroits : - type : `string` - L'URL entièrement résolue, incluant la requête et le hash. + L'URL entièrement résolu, incluant la requête et le hash. - **$route.matched** diff --git a/docs/fr/api/router-instance.md b/docs/fr/api/router-instance.md index 348301bd3..e7714991b 100644 --- a/docs/fr/api/router-instance.md +++ b/docs/fr/api/router-instance.md @@ -26,9 +26,9 @@ - **router.beforeResolve(guard)** (2.5.0+) - **router.afterEach(hook)** - Ajout de sécurités globales de navigation. Voir les [sécurités de navigation](../advanced/navigation-guards.md). + Ajout des interceptions globales de navigation. Voir les [Intercepteurs de navigation](../advanced/navigation-guards.md). - Dans la version 2.5.0+, ces trois méthodes retournent une fonction qui enlève les fonctions de sécurisations et hooks enregistrés. + Dans la version 2.5.0+, ces trois méthodes retournent une fonction qui enlève les fonctions d'interception et hooks enregistrés. - **router.push(location, onComplete?, onAbort?)** - **router.replace(location, onComplete?, onAbort?)** @@ -41,13 +41,13 @@ - **router.getMatchedComponents(location?)** Retourne un tableau de composants (définition/constructeur et non les instances) correspondant à la `location` passée en paramètre, ou alors de la route actuelle. Cette fonction est principalement utilisée pendant le rendu côté serveur afin d'effectuer une pré-récupération des données. - + - **router.resolve(location, current?, append?)** > 2.1.0+ Inverse la résolution d'URL. La `location` doit avoir la même forme qu'utilisée dans ``, retourne un objet avec les propriétés suivantes : - + ``` js { location: Location; @@ -57,14 +57,14 @@ ``` - `current` is the current Route by default (most of the time you don't need to change this) - - `append` allows you to append the path to the `current` route (as with [`router-link`](https://router.vuejs.org/en/api/router-link.html#props)) + - `append` allows you to append the path to the `current` route (as with [`router-link`](router-link.md#props)) - **router.addRoutes(routes)** > 2.2.0+ Permet d'ajouter dynamiquement des routes au routeur. L'argument doit être un tableau utilisant le même format de configuration que l'option `routes` du constructeur. - + - **router.onReady(callback, [errorCallback])** > 2.2.0+ @@ -74,15 +74,15 @@ C'est utile pendant un rendu côté serveur pour assurer une sortie consistance sur le serveur et le client. Le deuxième argument `errorCallback` est uniquement supporté à partir de la version 2.4. Il sera appelé lorsque la résolution de la route initiale résultera en une erreur (ex : la résolution d'un composant asynchrone qui a échouée). - + - **router.onError(callback)** > 2.4.0+ Enregistre une fonction de rappel qui sera appelée lorsqu'une erreur sera capturée pendant la navigation vers une route. Notez que pour qu'une erreur soit appelée, cela doit correspondre à l'un des scénarios suivants : - - L'erreur est lancée de manière synchrone à l'intérieur d'une fonction de sécurisation de route ; + - L'erreur est lancée de manière synchrone à l'intérieur d'une fonction d'interception de route ; + + - L'erreur est capturée et traitée de manière asynchrone en appelant `next(err)` à l'intérieur d'une fonction de d'interception de route ; - - L'erreur est capturée et traitée de manière asynchrone en appelant `next(err)` à l'intérieur d'une fonction de sécurisation de route ; - - Une erreur est survenue pendant la résolution d'un composant asynchrone qui est requis pour faire le rendu d'une route. diff --git a/docs/fr/api/router-link.md b/docs/fr/api/router-link.md index 74fe81872..379e27826 100644 --- a/docs/fr/api/router-link.md +++ b/docs/fr/api/router-link.md @@ -8,7 +8,7 @@ - Dans le mode historique HTML5, `router-link` interceptera l'évènement du clic, comme ça le navigateur n'essaiera pas de rafraîchir la page. -- En utilisant l'option `base` dans le mode historique HTML5, vous n'avez pas besoin de l'inclure dans les props `to` des URLs. +- En utilisant l'option `base` dans le mode historique HTML5, vous n'avez pas besoin de l'inclure dans les props `to` des URL. ### Props @@ -19,7 +19,7 @@ - requis Désigne la route cible du lien. Lorsqu'il est cliqué, la valeur de la prop `to` va être passée de manière interne à `router.push`, donc la valeur peut soit être une chaîne de caractères, ou alors un objet décrivant une localisation. - + ``` html Accueil @@ -63,7 +63,7 @@ - défaut : `false` Configurer la propriété `append` suffixe toujours le chemin relatif au chemin courant. Par exemple, assumons que nous naviguons de `/a` à un lien relatif `b`, sans `append` on finira sur `/b`, mais avec `append` on finira sur `/a/b`. - + ``` html ``` @@ -106,7 +106,7 @@ ``` - + Allez voir les exemples expliquant la classe active pour les liens [ici](https://jsfiddle.net/8xrk1n9f/). - **event** diff --git a/docs/fr/essentials/dynamic-matching.md b/docs/fr/essentials/dynamic-matching.md index e764e8e49..45d911bad 100644 --- a/docs/fr/essentials/dynamic-matching.md +++ b/docs/fr/essentials/dynamic-matching.md @@ -15,7 +15,7 @@ const router = new VueRouter({ }) ``` -Maintenant des URLs comme `/utilisateur/foo` et `/utilisateur/bar` seront chacune associée à la même route. +Maintenant des URL comme `/utilisateur/foo` et `/utilisateur/bar` seront chacun associé à la même route. Un segment dynamique se repère avec les deux-points `:`. Quand une route concorde, la valeur du segment dynamique est exposée via `this.$route.params` dans tous les composants. Et donc, nous pouvons faire le rendu de l'identifiant de l'utilisateur courant en mettant à jour le template de `User` ainsi : @@ -53,7 +53,7 @@ const User = { } ``` -Ou utiliser la fonction de sécurisation `beforeRouteUpdate` introduite avec la 2.2 : +Ou utiliser la fonction d'interception `beforeRouteUpdate` introduite avec la 2.2 : ``` js const User = { @@ -71,4 +71,4 @@ const User = { ### Priorité de concordance -Parfois la même URL peut être adressée par de multiples routes. Dans ce cas, la priorité de concordance est déterminée par l'ordre de la définition des routes : plus la route est définie tôt, plus sa priorité est élevée. +Parfois la même URL peut être adressé par de multiples routes. Dans ce cas, la priorité de concordance est déterminée par l'ordre de la définition des routes : plus la route est définie tôt, plus sa priorité est élevée. diff --git a/docs/fr/essentials/history-mode.md b/docs/fr/essentials/history-mode.md index 04c74bdcb..d5b0dad77 100644 --- a/docs/fr/essentials/history-mode.md +++ b/docs/fr/essentials/history-mode.md @@ -1,8 +1,8 @@ -# HTML5 History Mode (En)

*Cette page est en cours de traduction française. Revenez une autre fois pour lire une traduction achevée ou [participez à la traduction française ici](https://github.com/vuejs-fr/vue-router).* +# Mode historique de HTML5 -The default mode for `vue-router` is _hash mode_ - it uses the URL hash to simulate a full URL so that the page won't be reloaded when the URL changes. +Le mode par défaut de `vue-router` est le _mode hash_. Il utilise la partie hash de l'URL pour simuler un URL complet et ainsi ne pas recharger la page quand l'URL change. -To get rid of the hash, we can use the router's **history mode**, which leverages the `history.pushState` API to achieve URL navigation without a page reload: +Pour se passer du hash, nous pouvons utiliser le **mode historique** qui utilisera l'API `history.pushState` afin de permettre une navigation sans rechargement de page : ``` js const router = new VueRouter({ @@ -11,13 +11,13 @@ const router = new VueRouter({ }) ``` -When using history mode, the URL will look "normal," e.g. `http://oursite.com/user/id`. Beautiful! +Quand vous utilisez le mode historique, l'URL ressemblera a n'importe quel URL normal. Par ex. `http://oursite.com/user/id`. Magnifique ! -Here comes a problem, though: Since our app is a single page client side app, without a proper server configuration, the users will get a 404 error if they access `http://oursite.com/user/id` directly in their browser. Now that's ugly. +Cependant, un problème apparaît si votre application est une application monopage cliente. Sans une configuration serveur adaptée, les utilisateurs tomberons sur une page d'erreur 404 en tentant d'accéder à `http://oursite.com/user/id` directement dans leur navigateur. Maintenant ça craint. -Not to worry: To fix the issue, all you need to do is add a simple catch-all fallback route to your server. If the URL doesn't match any static assets, it should serve the same `index.html` page that your app lives in. Beautiful, again! +Ne vous inquiétez pas. Pour résoudre ce problème, il vous suffit d'ajouter une route à votre serveur prenant en compte toutes les adresses demandées. Si l'URL demandée ne concorde avec aucun fichier statique, alors il doit toujours renvoyer la page `index.html` qui contient le code de votre application. De nouveau magnifique ! -## Example Server Configurations +## Exemple de configurations serveur #### Apache @@ -40,12 +40,37 @@ location / { } ``` -#### Node.js (Express) +#### Node.js natif -For Node.js/Express, consider using [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback). +```js +const http = require("http") +const fs = require("fs") +const httpPort = 80 -#### Internet Information Services (IIS) +http.createServer((req, res) => { + fs.readFile("index.htm", "utf-8", (err, content) => { + if (err) { + console.log(`Impossible d'ouvrir le fichier "index.htm"`) + } + + res.writeHead(200, { + "Content-Type": "text/html; charset=utf-8" + }) + + res.end(content) + }) +}).listen(httpPort, () => { + console.log("Le serveur écoute à : http://localhost:%s", httpPort) +}) ``` + +#### Node.js avec Express + +Pour Node.js avec Express, vous pouvez utiliser le [middleware connect-history-api-fallback](https://github.com/bripkens/connect-history-api-fallback). + +#### Internet Information Services (IIS) + +```xml @@ -61,10 +86,10 @@ For Node.js/Express, consider using [connect-history-api-fallback middleware](ht - - + + - + @@ -72,9 +97,18 @@ For Node.js/Express, consider using [connect-history-api-fallback middleware](ht ``` -## Caveat +#### Caddy + +``` +rewrite { + regexp .* + to {path} / +} +``` + +## Limitation -There is a caveat to this: Your server will no longer report 404 errors as all not-found paths now serve up your `index.html` file. To get around the issue, you should implement a catch-all route within your Vue app to show a 404 page: +Il y a une limitation a tout ceci. Votre serveur ne renverra plus les erreurs 404 des chemins qui ne sont pas trouvés puisqu'il va servir à présent le fichier `index.html`. Pour contourner ce problème, vous pouvez implémenter une route concordant avec toutes les adresses en 404 dans votre application Vue : ``` js const router = new VueRouter({ @@ -85,4 +119,4 @@ const router = new VueRouter({ }) ``` -Alternatively, if you are using a Node.js server, you can implement the fallback by using the router on the server side to match the incoming URL and respond with 404 if no route is matched. +Une alternative possible, si vous utilisez un serveur Node.js, est d'implémenter ce mécanisme de substitution en utilisant le routeur côté serveur pour vérifier la concordance des demandes d'URL entrant. Si la route ne concorde avec rien, la page est inexistante. Consultez l'[utilisation de Vue côté serveur](https://ssr.vuejs.org/fr/) pour plus d'informations. diff --git a/docs/fr/essentials/named-views.md b/docs/fr/essentials/named-views.md index 844fe8515..c0c02af8a 100644 --- a/docs/fr/essentials/named-views.md +++ b/docs/fr/essentials/named-views.md @@ -25,4 +25,4 @@ const router = new VueRouter({ }) ``` -Une démo de cet exemple peut-être trouvée ici : [ici](https://jsfiddle.net/posva/6du90epg/). +Une démo de cet exemple peut-être trouvée [ici](https://jsfiddle.net/posva/6du90epg/). diff --git a/docs/fr/essentials/navigation.md b/docs/fr/essentials/navigation.md index 7008c9574..72949fa51 100644 --- a/docs/fr/essentials/navigation.md +++ b/docs/fr/essentials/navigation.md @@ -6,7 +6,7 @@ En complément du l'utilisation de `` pour créer des balises ancre ** Note : Dans une instance Vue, vous pouvez accéder à l'instance du routeur via `$router`. Vous pouvez donc appeler `this.$router.push`.** -Pour naviguer vers une URL différente, utilisez `router.push`. Cette méthode ajoute une nouvelle entrée dans la pile de l'historique. Ainsi quand un utilisateur clique sur le bouton retour de son navigateur, il retournera à l'URL précédente. +Pour naviguer vers un URL différent, utilisez `router.push`. Cette méthode ajoute une nouvelle entrée dans la pile de l'historique. Ainsi quand un utilisateur clique sur le bouton retour de son navigateur, il retournera à l'URL précédent. Cette méthode est appelée en interne quand vous cliquez sur ``, donc cliquer sur `` est équivalent à appeler `router.push(...)`. @@ -30,8 +30,22 @@ router.push({ name: 'user', params: { userId: 123 }}) router.push({ path: 'register', query: { plan: 'private' }}) ``` +**Note :** `params` est ignoré si `path` est fourni, ce qui n'est pas le cas pour `query`, comme démontré dans l'exemple ci-dessous. À la place, vous devez fournir le `name` de la route ou manuellement spécifier le `path` complet avec tous les paramètres : + +```js +const userId = 123 +router.push({ name: 'user', params: { userId }}) // -> /user/123 +router.push({ path: `/user/${userId}` }) // -> /user/123 +// Ceci ne vas PAS fonctionner +router.push({ path: '/user', params: { userId }}) // -> /user +``` + +Les mêmes règles s'appliquent pour la propriété `to` du composant `router-link`. + Dans la version 2.2.0+, vous pouvez optionnellement fournir les fonctions de rappel `onComplete` et `onAbort` à `router.push` ou `router.replace` en tant que deuxième et troisième arguments. Ces fonctions de rappel seront appelées quand la navigation sera respectivement ; complétée avec succès (après la résolution de tous les hooks asynchrones), ou arrêtée (navigation vers la même route ou vers une route différente avant que la navigation courante ne soit achevée). +**Note :** si la destination est la même que la route courante et que seuls les paramètres ont changés (par ex. naviguer d'un profil à l'autre `/utilisateurs/1` -> `/utilisateurs/2`), vous devrez utiliser [beforeRouteUpdate](./dynamic-matching.html#réactivité-aux-changements-de-paramètres) pour réagir aux changements (par ex. récupérer les informations de l'utilisateur). + #### `router.replace(location, onComplete?, onAbort?)` Il agit comme `router.push`. La seule différence est que la navigation se fait sans ajouter de nouvelle entrée dans la pile de l'historique. Comme son nom l'indique, il remplace l'entrée courante. diff --git a/docs/fr/essentials/nested-routes.md b/docs/fr/essentials/nested-routes.md index 998dc05d1..8c3d007be 100644 --- a/docs/fr/essentials/nested-routes.md +++ b/docs/fr/essentials/nested-routes.md @@ -1,6 +1,6 @@ # Routes imbriquées -Les vrais interfaces utilisateurs d'application sont faites de composants imbriqués à de multiples niveaux de profondeur. Il est aussi très commun que les segments d'URLs correspondent à une certaine structure de composants imbriqués, par exemple : +Les vrais interfaces utilisateurs d'application sont faites de composants imbriqués à de multiples niveaux de profondeur. Il est aussi très commun que les segments d'URL correspondent à une certaine structure de composants imbriqués, par exemple : ``` /utilisateur/foo/profil /utilisateur/foo/billets @@ -73,7 +73,7 @@ const router = new VueRouter({ }) ``` -**Notez que les chemins imbriqués commençant par `/` vont être traités comme des chemins partant de la racine. Cela vous permet d'adresser des composants imbriqués sans avoir à utiliser une URL imbriquée.** +**Notez que les chemins imbriqués commençant par `/` vont être traités comme des chemins partant de la racine. Cela vous permet d'adresser des composants imbriqués sans avoir à utiliser un URL imbriqué.** Comme vous pouvez le voir, l'option `children` n'est qu'un autre tableau d'objet de configuration de route comme dans `routes`. Et donc, vous pouvez garder les vues imbriquées au plus près de vos besoins. diff --git a/docs/fr/essentials/passing-props.md b/docs/fr/essentials/passing-props.md index 6ed2711c3..15f0ba81d 100644 --- a/docs/fr/essentials/passing-props.md +++ b/docs/fr/essentials/passing-props.md @@ -1,36 +1,36 @@ -# Passing Props to Route Components (En)

*Cette page est en cours de traduction française. Revenez une autre fois pour lire une traduction achevée ou [participez à la traduction française ici](https://github.com/vuejs-fr/vue-router).* +# Passage de props aux composants de route -Using `$route` in your component creates a tight coupling with the route which limits the flexibility of the component as it can only be used on certain urls. +Utiliser `$route` dans vos composants crée un couplage fort à la route qui va limiter la flexibilité du composant qui ne pourra être utilisé que par certains URL. -To decouple this component from the router use props: +Pour découpler un composant de son routeur, utilisez les props : -**❌ Coupled to $route** +**❌ Couplé avec `$route`** ``` js const User = { - template: '
User {{ $route.params.id }}
' + template: '
Utilisateur {{ $route.params.id }}
' } const router = new VueRouter({ routes: [ - { path: '/user/:id', component: User } + { path: '/utilisateur/:id', component: User } ] }) ``` -**👍 Decoupled with props** +**👍 Découplé avec les `props`** ``` js const User = { props: ['id'], - template: '
User {{ id }}
' + template: '
Utilisateur {{ id }}
' } const router = new VueRouter({ routes: [ - { path: '/user/:id', component: User, props: true } - - // for routes with named views, you have to define the props option for each named view: + { path: '/utilisateur/:id', component: User, props: true } + + // pour les routes avec vues nommées, vous devez définir l'option `props` pour chaque vue nommée : { - path: '/user/:id', + path: '/utilisateur/:id', components: { default: User, sidebar: Sidebar }, props: { default: true, sidebar: false } } @@ -38,16 +38,15 @@ const router = new VueRouter({ }) ``` -This allows you to use the component anywhere, which makes the component easier to reuse and test. +Cela vous permet d'utiliser le composant n'importe où, ce qui le rend plus facile à réutiliser et à tester. -### Boolean mode +### Mode booléen -When props is set to true, the route.params will be set as the component props. +Quand `props` est mis à `true`, le `route.params` est remplis en tant que props du composant. -### Object mode +### Mode objet -When props is an object, this will be set as the component props as-is. -Useful for when the props are static. +Quand `props` est un objet, cela alimente les props de celui-ci. Utile quand les props sont statiques. ``` js const router = new VueRouter({ @@ -57,10 +56,9 @@ const router = new VueRouter({ }) ``` -### Function mode +### Mode fonction -You can create a function that returns props. -This allows you to cast the parameter to another type, combine static values with route-based values, etc. +Vous pouvez créer une fonction qui va retourner les props. Cela vous permet de caster des paramètres dans un autre type, de combiner les valeurs statiques avec les valeurs des routes, etc. ``` js const router = new VueRouter({ @@ -70,10 +68,8 @@ const router = new VueRouter({ }) ``` -The url: `/search?q=vue` would pass `{query: "vue"}` as props to the SearchUser component. - -Try to keep the props function stateless, as it's only evaluated on route changes. -Use a wrapper component if you need state to define the props, that way vue can react to state changes. +L'URL `/search?q=vue` passerait `{query: 'vue'}` comme `props` au composant `SearchUser`. +Essayez de garder la fonction de `props` sans état, car il n'est évalué que sur les changements de route. Utilisez un composant englobant si vous avez besoin d'état pour définir les props, ainsi la vue pourra réagir au changement d'état. -For advanced usage, checkout the [example](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). +Pour une utilisation avancée, jettez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs/fr/essentials/redirect-and-alias.md b/docs/fr/essentials/redirect-and-alias.md index bcd9954dd..78a2006d3 100644 --- a/docs/fr/essentials/redirect-and-alias.md +++ b/docs/fr/essentials/redirect-and-alias.md @@ -39,7 +39,7 @@ Pour d'autres utilisations avancées, jetez un œil à cet [exemple](https://git ### Alias -Une redirection signifie que si l'utilisateur visite `/a`, l'URL va être remplacée par `/b` et concordé avec `/b`. Mais qu'est-ce qu'un alias ? +Une redirection signifie que si l'utilisateur visite `/a`, l'URL va être remplacé par `/b` et concordé avec `/b`. Mais qu'est-ce qu'un alias ? ** Un alias de `/a` en tant que `/b` signifie que lorsque l'utilisateur va visiter `/b`, l'URL vas rester `/b`, mais la concordance va se faire comme si l'utilisateur visitait `/a`.** @@ -53,6 +53,6 @@ const router = new VueRouter({ }) ``` -Un alias vous donne la liberté d'associer une structure d'interface utilisateur à une URL arbitraire, au lieu d'être contraint par une configuration de structure. +Un alias vous donne la liberté d'associer une structure d'interface utilisateur à un URL arbitraire, au lieu d'être contraint par une configuration de structure. Pour d'autres utilisations avancées, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js). diff --git a/docs/fr/installation.md b/docs/fr/installation.md index b57f2cea6..21ead6cbe 100644 --- a/docs/fr/installation.md +++ b/docs/fr/installation.md @@ -5,7 +5,7 @@ [https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js) -[Unpkg.com](https://unpkg.com) fournit des liens CDN basés sur NPM. Le lien ci-dessus pointera toujours vers la dernière release sur NPM. Vous pouvez aussi utiliser un tag ou une version spécifique via une URL comme `https://unpkg.com/vue-router@2.0.0/dist/vue-router.js`. +[Unpkg.com](https://unpkg.com) fournit des liens CDN basés sur npm. Le lien ci-dessus pointera toujours vers la dernière version sur npm. Vous pouvez aussi utiliser un tag ou une version spécifique via un URL comme `https://unpkg.com/vue-router@2.0.0/dist/vue-router.js`. Incluez `vue-router` après Vue et l'installation sera automatique : @@ -15,7 +15,7 @@ Incluez `vue-router` après Vue et l'installation sera automatique : ``` -### NPM +### npm ``` bash npm install vue-router