You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<pclass="tip">**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/vuejs.org).**</p>There may be data/utilities you'd like to use in many components, but you don't want to [pollute the global scope](https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch3.md). In these cases, you can make them available to each Vue instance by defining them on the prototype:
9
+
Il peut y avoir des données/utilitaires que vous aimeriez utiliser dans de nombreux composants, mais vous ne voulez pas [polluer la portée globale](https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch3.md). Dans ces cas-là, vous pouvez les rendre accessibles dans chaque instance de Vue en les définissant dans le prototype:
10
10
11
11
```js
12
-
Vue.prototype.$appName='My App'
12
+
Vue.prototype.$appName='Mon App'
13
13
```
14
14
15
-
Now`$appName`is available on all Vue instances, even before creation. If we run:
15
+
Maintenant,`$appName`sera accessible dans toutes les instances de Vue, même avant leur création. Si nous exécutons :
16
16
17
17
```js
18
18
newVue({
@@ -22,32 +22,32 @@ new Vue({
22
22
})
23
23
```
24
24
25
-
Then`"My App"`will be logged to the console. It's that simple!
25
+
Alors`"Mon App"`sera affiché en console. C'est aussi simple!
26
26
27
-
## The Importance of Scoping Instance Properties
27
+
## L'importance de la portée des propriétés d'instances
28
28
29
-
You may be wondering:
29
+
Il se peut que vous vous demandiez :
30
30
31
-
> "Why does `appName`start with `$`? Is that important? What does it do?
31
+
> "Pourquoi `appName`commence par un `$` ? Est-ce important ? Qu'est-ce que ça fait ?
32
32
33
-
No magic is happening here. `$`is simply a convention Vue uses for properties that are available to all instances. This avoids conflicts with any defined data, computed properties, or methods.
33
+
Aucune magie n'a lieu ici. `$`est simplement une convention que Vue utilise pour les propriétés qui sont accessibles dans toutes les instances. Cela évite les conflits avec toutes les autres données définies, propriétés calculées ou méthodes.
34
34
35
-
> "Conflicts? What do you mean?"
35
+
> "Conflits ? Qu'est-ce que ça signifie ?"
36
36
37
-
Another great question! If you just set:
37
+
Une autre bonne question ! Si vous faites juste :
38
38
39
39
```js
40
40
Vue.prototype.appName='My App'
41
41
```
42
42
43
-
Then what would you expect to be logged below?
43
+
Alors qu'est-ce qui sera affiché ci-dessous d'après vous ?
44
44
45
45
```js
46
46
newVue({
47
47
data: {
48
-
//Uh oh - appName is *also* the name of the
49
-
// instance property we just defined!
50
-
appName:'The name of some other app'
48
+
//Oups - appName est *aussi* le nom de la
49
+
//propriété d'instance que nous venons de définir !
50
+
appName:"Le nom d'une autre app"
51
51
},
52
52
beforeCreate:function () {
53
53
console.log(this.appName)
@@ -58,13 +58,13 @@ new Vue({
58
58
})
59
59
```
60
60
61
-
It would be `"The name of some other app"`, then`"My App"`, because`this.appName`is overwritten ([sort of](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%20object%20prototypes/ch5.md)) by`data`when the instance is created. We scope instance properties with `$`to avoid this. You can even use your own convention if you'd like, such as `$_appName`or`ΩappName`, to prevent even conflicts with plugins or future features.
61
+
Cela sera `"Le nom d'une autre app"`, puis`"Mon App"`, car`this.appName`est écrasée ([en quelques sortes](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%20object%20prototypes/ch5.md)) par`data`quand l'instance est créée. Nous limitons la portée des propriétés avec `$`pour éviter ça. Vous pouvez même utiliser votre propre convention si vous préférez, comme `$_appName`ou`ΩappName`, pour en plus prévenir les conflits avec les plugins et les fonctionnalités futures.
62
62
63
-
## Real-World Example: Replacing Vue Resource with Axios
63
+
## Un exemple en situation réelle : Remplacer Vue Resource par Axios
64
64
65
-
Let's say you're replacing the [now-retired Vue Resource](https://medium.com/the-vue-point/retiring-vue-resource-871a82880af4). You really enjoyed accessing request methods through `this.$http`and you want to do the same thing with Axios instead.
65
+
Disons que vous remplacez le [maintenant déprécié Vue Resource](https://medium.com/the-vue-point/retiring-vue-resource-871a82880af4) ; vous aimiez vraiment accéder aux méthodes de requête avec `this.$http`et vous voulez faire la même chose avec Axios à la place.
66
66
67
-
All you have to do is include axios in your project:
67
+
Tout ce que vous avez à faire est inclure axios dans votre projet :
@@ -76,13 +76,13 @@ All you have to do is include axios in your project:
76
76
</div>
77
77
```
78
78
79
-
Alias `axios`to`Vue.prototype.$http`:
79
+
Puis assigner `axios`à`Vue.prototype.$http`:
80
80
81
81
```js
82
82
Vue.prototype.$http= axios
83
83
```
84
84
85
-
Then you'll be able to use methods like`this.$http.get`in any Vue instance:
85
+
Alors vous serez capables d'utiliser des méthodes comme`this.$http.get`dans n'importe quelle instance de Vue :
86
86
87
87
```js
88
88
newVue({
@@ -100,11 +100,11 @@ new Vue({
100
100
})
101
101
```
102
102
103
-
## The Context of Prototype Methods
103
+
## Le contexte des méthodes du prototype
104
104
105
-
In case you're not aware, methods added to a prototype in JavaScript gain the context of the instance. That means they can use`this`to access data, computed properties, methods, or anything else defined on the instance.
105
+
Au cas où vous ne seriez pas au courant, les méthodes ajoutées au prototype en JavaScript obtiennent le contexte de l'instance. Cela signifie qu'elles peuvent utiliser`this`pour accéder aux data, propriétés calculées, méthodes ou toute autre chose définie dans l'instance.
106
106
107
-
Let's take advantage of this in a `$reverseText`method:
107
+
Profitons de ceci dans une méthode `$reverseText` :
Note that the context binding will __not__ work if you use an ES6/2015 arrow function, as they implicitly bind to their parent scope. That means the arrow function version:
126
+
Notez que la liaison du contexte ne fonctionnera __pas__ si vous utiliez une fonction fléchée ES6/2015, puisqu'elles gardent implicitement le contexte parent. Cela signifie que la version avec une fonction fléchée :
Uncaught TypeError: Cannot read property 'split' of undefined
138
138
```
139
139
140
-
## When To Avoid This Pattern
140
+
## Quand éviter ce *pattern*
141
141
142
-
As long as you're vigilant in scoping prototype properties, using this pattern is quite safe - as in, unlikely to produce bugs.
142
+
Tant que vous êtes vigilants sur la portée des propriétés du prototype, utiliser ce *pattern* est plutôt sûr - c'est-à-dire, peu probable de produire des bugs.
143
143
144
-
However, it can sometimes cause confusion with other developers. They might see`this.$http`, for example, and think, "Oh, I didn't know about this Vue feature!" Then they move to a different project and are confused when`this.$http`is undefined. Or, maybe they want to Google how to do something, but can't find results because they don't realize they're actually using Axios under an alias.
144
+
Cependant, il peut parfois semer la confusion auprès des autres développeurs. Ils peuvent voir`this.$http`, par exemple, et penser, "Oh, je ne savais pas qu'il s'agissait d'une fonctionnalité de Vue !". Ensuite ils vont sur un projet différent et sont confus quand`this.$http`est non défini. Ou alors ils cherchent sur Google comment faire quelque-chose, mais ne trouvent pas de résultats car ils ne réalisent pas qu'ils utilisent Axios sous un alias.
145
145
146
-
__The convenience comes at the cost of explicitness.__When just looking at a component, it's impossible to tell where`$http`came from. Vue itself? A plugin? A coworker?
146
+
__C'est certes plus commode mais moins explicite.__En regardant simplement un composant, il est impossible de dire d'où`$http`vient. Vue lui-même ? Un plugin ? Un collègue ?
147
147
148
-
So what are the alternatives?
148
+
Alors quelles sont les alternatives?
149
149
150
-
## Alternative Patterns
150
+
## *Patterns* Alternatifs
151
151
152
-
### When Not Using a Module System
152
+
### Quand ne pas utiliser un système de modules
153
153
154
-
In applications with __no__ module system (e.g. via Webpack or Browserify), there's a pattern that's often used with _any_ JavaScript-enhanced frontend: a global `App` object.
154
+
Dans les applications __sans__ systèmes de modules (ex. via Webpack ou Browserify), il y a un *pattern* souvent utilisé dans _n'importe quel_*frontend* amélioré en JavaScript : un objet global `App`.
155
155
156
-
If what you want to add has nothing to do with Vue specifically, this may be a good alternative to reach for. Here's an example:
156
+
Si ce que vous voulez ajouter n'a rien à voir avec Vue spécifiquement, cela peut être une bonne alternative à étudier. Voici un exemple :
157
157
158
158
```js
159
159
var App =Object.freeze({
160
-
name:'My App',
160
+
name:'Mon App',
161
161
description:'2.1.4',
162
162
helpers: {
163
-
//This is a purely functional version of
164
-
//the $reverseText method we saw earlier
163
+
//Ceci est une version purement fonctionnelle
164
+
//de la méthode $reverseText décrite plus haut
165
165
reverseText:function (text) {
166
166
returntext.split('').reverse().join('')
167
167
}
168
168
}
169
169
})
170
170
```
171
171
172
-
<pclass="tip">If you raised an eyebrow at `Object.freeze`, what it does is prevent the object from being changed in the future. This essentially makes all its properties constants, protecting you from future state bugs.</p>
172
+
<pclass="tip">Si vous avez levé un sourcil à `Object.freeze`, cela sert à empêcher l'objet d'être modifié dans le futur. Il s'agit essentiellement de rendre toutes ses propriétés constantes, les protégeant de futurs bugs d'état.</p>
173
173
174
-
Now the source of these shared properties is much more obvious: there's an `App`object defined somewhere in the app. To find it, developers need only run a project-wide search.
174
+
Maintenant la source de ces propriétés partagées est bien plus évidente : il y a un objet `App`défini quelque-part dans l'application. Pour le trouver, les développeurs ont seulement besoin de rechercher la référence dans le projet.
175
175
176
-
Another advantage is that `App`can now be used _anywhere_ in your code, whether it's Vue-related or not. That includes attaching values directly to instance options, rather than having to enter a function to access properties on `this`:
176
+
Un autre avantage est que `App`peut maintenant être utilisé _n'importe où_ dans le code, qu'il soit lié à Vue ou non. Cela inclue les valeurs attachées directement aux options des instances, plutôt qu'avoir à entrer dans une fonction pour accéder aux propriétés avec `this`:
177
177
178
178
```js
179
179
newVue({
@@ -186,8 +186,8 @@ new Vue({
186
186
})
187
187
```
188
188
189
-
### When Using a Module System
189
+
### Quand utiliser un système de modules
190
190
191
-
When you have access to a module system, you can easily organize shared code into modules, then`require`/`import`those modules wherever they're needed. This is the epitome of explicitness, because in each file you gain a list of dependencies. You know _exactly_ each one came from.
191
+
Quand vous avez accès à un système de modules, vous pouvez facilement organiser le code partagé à travers des modules, puis`require`/`import`ces modules partout où ils sont nécessaires. C'est l'approche la plus explicite car chaque fichier obtient alors une liste de dépendances. Vous savez _exactement_ d'où vient chacune d'entre elles.
192
192
193
-
While certainly more verbose, this approach is definitely the most maintainable, especially when working with other developers and/or building a large app.
193
+
Bien que certainement plus verbeux, cette approche est assurément la plus maintenable, particulièrement quand vous travaillez avec d'autres développeurs et/ou construisez une grosse application.
0 commit comments