Skip to content

Commit e4c6986

Browse files
MachinisteWebyyx990803
authored andcommitted
First fr translation part.
Signed-off-by: Bruno Lesieur <bruno.lesieur@gmail.com>
1 parent a52287e commit e4c6986

25 files changed

+1562
-0
lines changed

docs/LANGS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
* [2.0 - English](en/)
2+
* [2.0 - French](fr/)
23
* [2.0 - Japanese](ja/)
34
* [2.0 - 中文](zh-cn/)
45
* [2.0 - German](de/)

docs/fr/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{% include "./SUMMARY.md" %}

docs/fr/SUMMARY.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# vue-router 2
2+
<!--email_off-->
3+
> 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).
4+
<!--/email_off-->
5+
**[Notes de release](https://github.com/vuejs/vue-router/releases)**
6+
7+
- [Installation](installation.md)
8+
- Essentiel
9+
- [Pour commencer](essentials/getting-started.md)
10+
- [Dynamic Route Matching (En)](essentials/dynamic-matching.md)
11+
- [Nested Routes (En)](essentials/nested-routes.md)
12+
- [Programmatic Navigation (En)](essentials/navigation.md)
13+
- [Named Routes (En)](essentials/named-routes.md)
14+
- [Named Views (En)](essentials/named-views.md)
15+
- [Redirect and Alias (En)](essentials/redirect-and-alias.md)
16+
- [Passing Props to Route Components (En)](essentials/passing-props.md)
17+
- [HTML5 History Mode (En)](essentials/history-mode.md)
18+
- Avancé
19+
- [Navigation Guards (En)](advanced/navigation-guards.md)
20+
- [Route Meta Fields (En)](advanced/meta.md)
21+
- [Transitions (En)](advanced/transitions.md)
22+
- [La récupération de données](advanced/data-fetching.md)
23+
- [Les transitions](advanced/transitions.md)
24+
- [Comportement du défilement](advanced/scroll-behavior.md)
25+
- [Le chargement à la volée](advanced/lazy-loading.md)
26+
- Réference de l'API
27+
- [router-link](api/router-link.md)
28+
- [router-view](api/router-view.md)
29+
- [L'objet Route](api/route-object.md)
30+
- [Options de construction du routeur](api/options.md)
31+
- [L'Instance du routeur](api/router-instance.md)
32+
- [Injections de composant](api/component-injections.md)

docs/fr/advanced/data-fetching.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# La récupération de données
2+
3+
Parfois vous avez besoin de récupérer des données depuis le serveur lorsqu'une route est activée. Par exemple, avant de faire le rendu d'un profil utilisateur, vous avez besoin de récupérer les données de l'utilisateur depuis le serveur. Nous pouvons y parvenir de deux façons différentes :
4+
5+
- **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.
6+
7+
- **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.
8+
9+
Techniquement, les deux choix sont valides. Cela dépend de l'expérience utilisateur que vous souhaitez apporter.
10+
11+
## Récupération de données après la navigation
12+
13+
En utilisant cette approche, nous naviguons et faisons immédiatement le rendu du composant et récupérons les données via le hook `created` du composant. Cela nous donne l'opportunité d'afficher un état de chargement pendant que les données sont récupérées à travers le réseau, et nous pouvons aussi gérer le chargement différemment pour chaque vue.
14+
15+
Assumons que nous ayons un composant `Post` qui a besoin de récupérer des données pour un billet identifié par `$route.params.id` :
16+
17+
``` html
18+
<template>
19+
<div class="post">
20+
<div class="loading" v-if="loading">
21+
Chargement...
22+
</div>
23+
24+
<div v-if="error" class="error">
25+
{{ error }}
26+
</div>
27+
28+
<div v-if="post" class="content">
29+
<h2>{{ post.title }}</h2>
30+
<p>{{ post.body }}</p>
31+
</div>
32+
</div>
33+
</template>
34+
```
35+
36+
``` js
37+
export default {
38+
data () {
39+
return {
40+
loading: false,
41+
post: null,
42+
error: null
43+
}
44+
},
45+
created () {
46+
// récupérer les données lorsque la vue est créée et
47+
// que les données sont déjà observées
48+
this.fetchData()
49+
},
50+
watch: {
51+
// appeler encore la méthode si la route change
52+
'$route': 'fetchData'
53+
},
54+
methods: {
55+
fetchData () {
56+
this.error = this.post = null
57+
this.loading = true
58+
// remplacer `getPost` par une fonction de récupération de données
59+
getPost(this.$route.params.id, (err, post) => {
60+
this.loading = false
61+
if (err) {
62+
this.error = err.toString()
63+
} else {
64+
this.post = post
65+
}
66+
})
67+
}
68+
}
69+
}
70+
```
71+
72+
## Récupération de données avant la navigation
73+
74+
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 :
75+
76+
``` js
77+
export default {
78+
data () {
79+
return {
80+
post: null,
81+
error: null
82+
}
83+
},
84+
beforeRouteEnter (to, from, next) {
85+
getPost(to.params.id, (err, post) => {
86+
next(vm => vm.setData(err, post))
87+
})
88+
},
89+
// quand la route change et que ce composant est déjà rendu,
90+
// la logique est un peu différente
91+
beforeRouteUpdate (to, from, next) {
92+
this.post = null
93+
getPost(to.params.id, (err, post) => {
94+
this.setData(err, post)
95+
next()
96+
})
97+
},
98+
methods: {
99+
setData (err, post) {
100+
if (err) {
101+
this.error = err.toString()
102+
} else {
103+
this.post = post
104+
}
105+
}
106+
}
107+
}
108+
```
109+
110+
L'utilisateur va rester sur la vue précédente pendant que la ressource est en train d'être récupérée pour la vue à venir. Il est cependant recommandé d'afficher une barre de progression ou un autre type d'indicateur pendant que les données sont en train d'être récupérées. Si la récupération échoue, il est aussi recommandé d'afficher une sorte de message d'erreur global.

docs/fr/advanced/lazy-loading.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Le chargement à la volée
2+
3+
Pendant la construction d'applications avec un empaqueteur (« bundler »), le paquet JavaScript peut devenir un peu lourd, et donc cela peut affecter le temps de chargement de la page. Il serait plus efficace si l'on pouvait séparer chaque composant de route dans des fragments séparés, et de les charger uniquement lorsque la route est visitée.
4+
5+
En combinant la [fonctionnalité de composant asynchrone](https://fr.vuejs.org/v2/guide/components.html#Composants-asynchrones) de Vue et la [fonctionnalité de séparation de code](https://webpack.js.org/guides/code-splitting-require/) de webpack, il est très facile de charger à la volée les composants de route.
6+
7+
Tout ce que nous avons à faire, c'est de définir les composants de notre route en tant que composants asynchrones :
8+
9+
``` js
10+
const Foo = resolve => {
11+
// `require.ensure` est une syntaxe spéciale de webpack pour une séparation de code.
12+
require.ensure(['./Foo.vue'], () => {
13+
resolve(require('./Foo.vue'))
14+
})
15+
}
16+
```
17+
18+
Il y a aussi une alternative à la syntaxe de séparation de code utilisant l'inclusion à la sauce AMD, cela peut être simplifié en :
19+
20+
``` js
21+
const Foo = resolve => require(['./Foo.vue'], resolve)
22+
```
23+
24+
Rien n'a besoin d'être modifié dans la configuration de la route, utilisez `Foo` comme d'habitude.
25+
26+
``` js
27+
const router = new VueRouter({
28+
routes: [
29+
{ path: '/foo', component: Foo }
30+
]
31+
})
32+
```
33+
34+
### Grouper des composants dans le même fragment
35+
36+
Parfois on aimerait grouper tous les composants imbriqués sous la même route, dans un seul et même fragment asynchrone. Pour arriver à cela, nous avons besoin d'utiliser les [fragments nommés](https://webpack.js.org/guides/code-splitting-require/#chunkname) en donnant un nom au fragment en 3ème argument de `require.ensure`.
37+
38+
``` js
39+
const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo')
40+
const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo')
41+
const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo')
42+
```
43+
44+
webpack groupera tous les modules asynchrones avec le même nom de fragment, dans le même fragment asynchrone. Cela signifie aussi que nous n'avons plus besoin de lister explicitement les dépendances pour `require.ensure` (équivaut à passer un tableau vide).

docs/fr/advanced/meta.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Route Meta Fields (En) <br><br> *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).*
2+
3+
You can include a `meta` field when defining a route:
4+
5+
``` js
6+
const router = new VueRouter({
7+
routes: [
8+
{
9+
path: '/foo',
10+
component: Foo,
11+
children: [
12+
{
13+
path: 'bar',
14+
component: Bar,
15+
// a meta field
16+
meta: { requiresAuth: true }
17+
}
18+
]
19+
}
20+
]
21+
})
22+
```
23+
24+
So how do we access this `meta` field?
25+
26+
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.
27+
28+
For example, with the above route config, the URL `/foo/bar` will match both the parent route record and the child route record.
29+
30+
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.
31+
32+
An example use case is checking for a meta field in the global navigation guard:
33+
34+
``` js
35+
router.beforeEach((to, from, next) => {
36+
if (to.matched.some(record => record.meta.requiresAuth)) {
37+
// this route requires auth, check if logged in
38+
// if not, redirect to login page.
39+
if (!auth.loggedIn()) {
40+
next({
41+
path: '/login',
42+
query: { redirect: to.fullPath }
43+
})
44+
} else {
45+
next()
46+
}
47+
} else {
48+
next() // make sure to always call next()!
49+
}
50+
})
51+
```

docs/fr/advanced/navigation-guards.md

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Navigation Guards (En) <br><br> *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).*
2+
3+
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.
4+
5+
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.
6+
7+
### Global Guards
8+
9+
You can register global before guards using `router.beforeEach`:
10+
11+
``` js
12+
const router = new VueRouter({ ... })
13+
14+
router.beforeEach((to, from, next) => {
15+
// ...
16+
})
17+
```
18+
19+
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.
20+
21+
Every guard function receives three arguments:
22+
23+
- **`to: Route`**: the target [Route Object](../api/route-object.md) being navigated to.
24+
25+
- **`from: Route`**: the current route being navigated away from.
26+
27+
- **`next: Function`**: this function must be called to **resolve** the hook. The action depends on the arguments provided to `next`:
28+
29+
- **`next()`**: move on to the next hook in the pipeline. If no hooks are left, the navigation is **confirmed**.
30+
31+
- **`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.
32+
33+
- **`next('/')` or `next({ path: '/' })`**: redirect to a different location. The current navigation will be aborted and a new one will be started.
34+
35+
- **`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()`.
36+
37+
**Make sure to always call the `next` function, otherwise the hook will never be resolved.**
38+
39+
### Global Resolve Guards
40+
41+
> New in 2.5.0
42+
43+
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**.
44+
45+
### Global After Hooks
46+
47+
You can also register global after hooks, however unlike guards, these hooks do not get a `next` function and cannot affect the navigation:
48+
49+
``` js
50+
router.afterEach((to, from) => {
51+
// ...
52+
})
53+
```
54+
55+
### Per-Route Guard
56+
57+
You can define `beforeEnter` guards directly on a route's configuration object:
58+
59+
``` js
60+
const router = new VueRouter({
61+
routes: [
62+
{
63+
path: '/foo',
64+
component: Foo,
65+
beforeEnter: (to, from, next) => {
66+
// ...
67+
}
68+
}
69+
]
70+
})
71+
```
72+
73+
These guards have the exact same signature as global before guards.
74+
75+
### Sécurisation intra-composants
76+
77+
Finally, you can directly define route navigation guards inside route components (the ones passed to the router configuration) with the following options:
78+
79+
- `beforeRouteEnter`
80+
- `beforeRouteUpdate` (added in 2.2)
81+
- `beforeRouteLeave`
82+
83+
``` js
84+
const Foo = {
85+
template: `...`,
86+
beforeRouteEnter (to, from, next) {
87+
// called before the route that renders this component is confirmed.
88+
// does NOT have access to `this` component instance,
89+
// because it has not been created yet when this guard is called!
90+
},
91+
beforeRouteUpdate (to, from, next) {
92+
// called when the route that renders this component has changed,
93+
// but this component is reused in the new route.
94+
// For example, for a route with dynamic params /foo/:id, when we
95+
// navigate between /foo/1 and /foo/2, the same Foo component instance
96+
// will be reused, and this hook will be called when that happens.
97+
// has access to `this` component instance.
98+
},
99+
beforeRouteLeave (to, from, next) {
100+
// called when the route that renders this component is about to
101+
// be navigated away from.
102+
// has access to `this` component instance.
103+
}
104+
}
105+
```
106+
107+
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.
108+
109+
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:
110+
111+
``` js
112+
beforeRouteEnter (to, from, next) {
113+
next(vm => {
114+
// access to component instance via `vm`
115+
})
116+
}
117+
```
118+
119+
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)`.
120+
121+
### The Full Navigation Resolution Flow
122+
123+
1. Navigation triggered
124+
2. Call leave guards in deactivated components
125+
3. Call global `beforeEach` guards
126+
4. Call `beforeRouteUpdate` guards in reused components (2.2+)
127+
5. Call `beforeEnter` in route configs
128+
6. Resolve async route components
129+
7. Call `beforeRouteEnter` in activated components
130+
8. Call global `beforeResolve` guards (2.5+)
131+
9. Navigation confirmed.
132+
10. Call global `afterEach` hooks.
133+
11. DOM updates triggered.
134+
12. Call callbacks passed to `next` in `beforeRouteEnter` guards with instantiated instances.

0 commit comments

Comments
 (0)