Skip to content

Commit 6167a0f

Browse files
committed
Merge remote-tracking branch 'upstream/dev' into working
# Conflicts: # docs/en/advanced/lazy-loading.md
2 parents 24f2148 + 05a5f08 commit 6167a0f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1946
-372
lines changed

.babelrc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"presets": ["es2015-loose", "flow-vue"],
2+
"presets": ["es2015", "flow-vue"],
33
"plugins": ["syntax-dynamic-import"]
44
}

build/build.js

-2
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,7 @@ function buildEntry (config) {
9292
const code = bundle.generate(config).code
9393
if (isProd) {
9494
var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
95-
fromString: true,
9695
output: {
97-
screw_ie8: true,
9896
ascii_only: true
9997
},
10098
compress: {

docs/LANGS.md

+1
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

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{% include "./SUMMARY.md" %}

docs/fr/SUMMARY.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# vue-router 2
2+
<!--email_off-->
3+
> Note: [email protected] 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

+110
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

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Le chargement à la volée
2+
3+
Pendant la construction d'applications avec un empaqueteur (« bundler »), le paquetage 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-async/) de webpack, il est très facile de charger à la volée les composants de route.
6+
7+
Premièrement, un composant asynchrone peut définir une fonction fabrique qui retourne une Promesse (qui devrait résoudre le composant lui-même) :
8+
9+
``` js
10+
const Foo = () => Promise.resolve({ /* définition du composant */ })
11+
```
12+
13+
Deuxièmement, avec webpack 2, nous pouvons utiliser la syntaxe d'[import dynamique](https://github.com/tc39/proposal-dynamic-import) pour indiquer un point de scission de code :
14+
15+
``` js
16+
import('./Foo.vue') // returns a Promise
17+
```
18+
19+
> Note: if you are using Babel, you will need to add the [syntax-dynamic-import](http://babeljs.io/docs/plugins/syntax-dynamic-import/) plugin so that Babel can properly parse the syntax.
20+
21+
Combining the two, this is how to define an async component that will be automatically code-split by webpack:
22+
23+
``` js
24+
const Foo = () => import('./Foo.vue')
25+
```
26+
27+
Rien n'a besoin d'être modifié dans la configuration de la route, utilisez `Foo` comme d'habitude.
28+
29+
``` js
30+
const router = new VueRouter({
31+
routes: [
32+
{ path: '/foo', component: Foo }
33+
]
34+
})
35+
```
36+
37+
### Grouper des composants dans le même fragment
38+
39+
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-async/#chunk-names) en donnant un nom au fragment en utilisant une syntaxe de commentaire spéciale (requires webpack > 2.4) :
40+
41+
``` js
42+
const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')
43+
const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue')
44+
const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue')
45+
```
46+
47+
webpack groupera tous les modules asynchrones avec le même nom de fragment dans le même fragment asynchrone.

docs/fr/advanced/meta.md

+51
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+
```

0 commit comments

Comments
 (0)