Skip to content

Commit 942523b

Browse files
Merge pull request #22 from sylvainpolletvillard/adding-instance-properties.md
Traduction adding-instance-properties.md
2 parents 710a8fa + 026f027 commit 942523b

File tree

1 file changed

+45
-45
lines changed

1 file changed

+45
-45
lines changed

Diff for: src/v2/cookbook/adding-instance-properties.md

+45-45
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
---
2-
title: Adding Instance Properties
2+
title: Ajouter des propriétés aux instances
33
type: cookbook
44
order: 1.1
55
---
66

7-
## Simple Example
7+
## Exemple simple
88

9-
<p class="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 :
1010

1111
``` js
12-
Vue.prototype.$appName = 'My App'
12+
Vue.prototype.$appName = 'Mon App'
1313
```
1414

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 :
1616

1717
``` js
1818
new Vue({
@@ -22,32 +22,32 @@ new Vue({
2222
})
2323
```
2424

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 !
2626

27-
## The Importance of Scoping Instance Properties
27+
## L'importance de la portée des propriétés d'instances
2828

29-
You may be wondering:
29+
Il se peut que vous vous demandiez :
3030

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 ?
3232
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.
3434

35-
> "Conflicts? What do you mean?"
35+
> "Conflits ? Qu'est-ce que ça signifie ?"
3636
37-
Another great question! If you just set:
37+
Une autre bonne question ! Si vous faites juste :
3838

3939
``` js
4040
Vue.prototype.appName = 'My App'
4141
```
4242

43-
Then what would you expect to be logged below?
43+
Alors qu'est-ce qui sera affiché ci-dessous d'après vous ?
4444

4545
``` js
4646
new Vue({
4747
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"
5151
},
5252
beforeCreate: function () {
5353
console.log(this.appName)
@@ -58,13 +58,13 @@ new Vue({
5858
})
5959
```
6060

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.
6262

63-
## Real-World Example: Replacing Vue Resource with Axios
63+
## Un exemple en situation réelle : Remplacer Vue Resource par Axios
6464

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.
6666

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 :
6868

6969
``` html
7070
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.15.2/axios.js"></script>
@@ -76,13 +76,13 @@ All you have to do is include axios in your project:
7676
</div>
7777
```
7878

79-
Alias `axios` to `Vue.prototype.$http`:
79+
Puis assigner `axios` à `Vue.prototype.$http` :
8080

8181
``` js
8282
Vue.prototype.$http = axios
8383
```
8484

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 :
8686

8787
``` js
8888
new Vue({
@@ -100,11 +100,11 @@ new Vue({
100100
})
101101
```
102102

103-
## The Context of Prototype Methods
103+
## Le contexte des méthodes du prototype
104104

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.
106106

107-
Let's take advantage of this in a `$reverseText` method:
107+
Profitons de ceci dans une méthode `$reverseText` :
108108

109109
``` js
110110
Vue.prototype.$reverseText = function (propertyName) {
@@ -123,57 +123,57 @@ new Vue({
123123
})
124124
```
125125

126-
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 :
127127

128128
``` js
129129
Vue.prototype.$reverseText = propertyName => {
130130
this[propertyName] = this[propertyName].split('').reverse().join('')
131131
}
132132
```
133133

134-
Would throw an error:
134+
Rejettera une exception :
135135

136136
``` log
137137
Uncaught TypeError: Cannot read property 'split' of undefined
138138
```
139139

140-
## When To Avoid This Pattern
140+
## Quand éviter ce *pattern*
141141

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.
143143

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.
145145

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 ?
147147

148-
So what are the alternatives?
148+
Alors quelles sont les alternatives ?
149149

150-
## Alternative Patterns
150+
## *Patterns* Alternatifs
151151

152-
### When Not Using a Module System
152+
### Quand ne pas utiliser un système de modules
153153

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`.
155155

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 :
157157

158158
``` js
159159
var App = Object.freeze({
160-
name: 'My App',
160+
name: 'Mon App',
161161
description: '2.1.4',
162162
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
165165
reverseText: function (text) {
166166
return text.split('').reverse().join('')
167167
}
168168
}
169169
})
170170
```
171171

172-
<p class="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+
<p class="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>
173173

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.
175175

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` :
177177

178178
``` js
179179
new Vue({
@@ -186,8 +186,8 @@ new Vue({
186186
})
187187
```
188188

189-
### When Using a Module System
189+
### Quand utiliser un système de modules
190190

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.
192192

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

Comments
 (0)