Skip to content

Commit 10360ab

Browse files
Merge pull request #29 from forresst/translate-computed
Traduction de computed.md
2 parents 57f9478 + 977d06a commit 10360ab

File tree

1 file changed

+69
-69
lines changed

1 file changed

+69
-69
lines changed

Diff for: src/v2/guide/computed.md

+69-69
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,60 @@
11
---
2-
title: Computed Properties and Watchers
2+
title: Propriétés calculées et observateurs
33
type: guide
44
order: 5
55
---
66

7-
## Computed Properties
7+
## Propriétés calculées
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>In-template expressions are very convenient, but they are really only meant for simple operations. Putting too much logic into your templates can make them bloated and hard to maintain. For example:
9+
Les expressions dans le template sont très pratiques, mais elles sont uniquement destinées à des opérations simples. Mettre trop de logique dans vos templates peut les rendre trop verbeux et difficiles à maintenir. Par exemple :
1010

1111
``` html
1212
<div id="example">
1313
{{ message.split('').reverse().join('') }}
1414
</div>
1515
```
1616

17-
At this point, the template is no longer simple and declarative. You have to look at it for a second before realizing that it displays `message` in reverse. The problem is made worse when you want to include the reversed message in your template more than once.
17+
À ce stade, le template n'est ni simple, ni déclaratif. Vous devez le regarder pendant une seconde avant de réaliser qu'il affiche `message` dans le sens inverse. Le problème s'aggrave lorsque vous souhaitez inclure le message inversé plusieurs fois dans votre template.
1818

19-
That's why for any complex logic, you should use a **computed property**.
19+
C'est pourquoi vous devriez utiliser des **propriétés calculées** pour toute logique complexe.
2020

21-
### Basic Example
21+
### Exemple basique
2222

2323
``` html
2424
<div id="example">
25-
<p>Original message: "{{ message }}"</p>
26-
<p>Computed reversed message: "{{ reversedMessage }}"</p>
25+
<p>Message original : "{{ message }}"</p>
26+
<p>Message inversé calculé : "{{ reversedMessage }}"</p>
2727
</div>
2828
```
2929

3030
``` js
3131
var vm = new Vue({
3232
el: '#example',
3333
data: {
34-
message: 'Hello'
34+
message: 'Bonjour'
3535
},
3636
computed: {
37-
// a computed getter
37+
// un accesseur calculé
3838
reversedMessage: function () {
39-
// `this` points to the vm instance
39+
// `this` pointe sur l'instance vm
4040
return this.message.split('').reverse().join('')
4141
}
4242
}
4343
})
4444
```
4545

46-
Result:
46+
Résultat :
4747

4848
{% raw %}
4949
<div id="example" class="demo">
50-
<p>Original message: "{{ message }}"</p>
51-
<p>Computed reversed message: "{{ reversedMessage }}"</p>
50+
<p>Message original : "{{ message }}"</p>
51+
<p>Message inversé calculé : "{{ reversedMessage }}"</p>
5252
</div>
5353
<script>
5454
var vm = new Vue({
5555
el: '#example',
5656
data: {
57-
message: 'Hello'
57+
message: 'Bonjour'
5858
},
5959
computed: {
6060
reversedMessage: function () {
@@ -65,38 +65,38 @@ var vm = new Vue({
6565
</script>
6666
{% endraw %}
6767

68-
Here we have declared a computed property `reversedMessage`. The function we provided will be used as the getter function for the property `vm.reversedMessage`:
68+
Ici, nous avons déclaré une propriété calculée `reversedMessage`. La fonction que nous avons fournie sera utilisée comme une fonction accesseur (getter) pour la propriété `vm.reversedMessage` :
6969

7070
``` js
71-
console.log(vm.reversedMessage) // -> 'olleH'
72-
vm.message = 'Goodbye'
73-
console.log(vm.reversedMessage) // -> 'eybdooG'
71+
console.log(vm.reversedMessage) // -> 'ruojnoB'
72+
vm.message = 'Au revoir'
73+
console.log(vm.reversedMessage) // -> 'riover uA'
7474
```
7575

76-
You can open the console and play with the example vm yourself. The value of `vm.reversedMessage` is always dependent on the value of `vm.message`.
76+
Vous pouvez ouvrir la console et jouer vous-même avec l'exemple de vm. La valeur de `vm.reversedMessage` dépend toujours de la valeur de `vm.message`.
7777

78-
You can data-bind to computed properties in templates just like a normal property. Vue is aware that `vm.reversedMessage` depends on `vm.message`, so it will update any bindings that depend on `vm.reversedMessage` when `vm.message` changes. And the best part is that we've created this dependency relationship declaratively: the computed getter function has no side effects, which makes it easy to test and reason about.
78+
Vous pouvez lier des données aux propriétés calculées dans les templates comme une propriété normale. Vue est au courant que `vm.reversedMessage` dépend de `vm.message`, donc il mettra à jour toutes les liaisons qui dépendent de `vm.reversedMessage` lorsque `vm.message` changera. Et le mieux dans tout cela est que nous avons crée cette relation de dépendance de façon déclarative : la fonction de l'accesseur calculé n'a pas d'effets secondaires, ce qui la rend facile à tester et à raisonner.
7979

80-
### Computed Caching vs Methods
80+
### Mise en cache dans `computed` vs `methods`
8181

82-
You may have noticed we can achieve the same result by invoking a method in the expression:
82+
Vous avez peut-être remarqué que nous pouvons accomplir le même résultat en invoquant une méthode dans l'expression :
8383

8484
``` html
85-
<p>Reversed message: "{{ reverseMessage() }}"</p>
85+
<p>Message inversé : "{{ reverseMessage() }}"</p>
8686
```
8787

8888
``` js
89-
// in component
89+
// dans le composant
9090
methods: {
9191
reverseMessage: function () {
9292
return this.message.split('').reverse().join('')
9393
}
9494
}
9595
```
9696

97-
Instead of a computed property, we can define the same function as a method instead. For the end result, the two approaches are indeed exactly the same. However, the difference is that **computed properties are cached based on their dependencies.** A computed property will only re-evaluate when some of its dependencies have changed. This means as long as `message` has not changed, multiple access to the `reversedMessage` computed property will immediately return the previously computed result without having to run the function again.
97+
Au lieu d'une propriété calculée, nous pouvons définir la même fonction en tant que méthode. Pour le résultat final, les deux approches sont en effet exactement les mêmes. Cependant, la différence est que **les propriétés déclarées dans `computed` sont mises en cache selon leurs dépendances.** Une propriété calculée sera réévaluée uniquement quand certaines de ses dépendances auront changé. Cela signifie que tant que `message` n'a pas changé, les multiples accès à la propriété calculée `reversedMessage` retourneront immédiatement le résultat précédemment calculé sans avoir à réexécuter la fonction.
9898

99-
This also means the following computed property will never update, because `Date.now()` is not a reactive dependency:
99+
Cela signifie également que la propriété calculée suivante ne sera jamais mise à jour, parce que `Date.now()` n'est pas une dépendance réactive :
100100

101101
``` js
102102
computed: {
@@ -106,13 +106,13 @@ computed: {
106106
}
107107
```
108108

109-
In comparison, a method invocation will **always** run the function whenever a re-render happens.
109+
En comparaison, une invocation de méthode exécutera **toujours** la fonction à chaque fois que se produira un re-déclenchement du rendu.
110110

111-
Why do we need caching? Imagine we have an expensive computed property **A**, which requires looping through a huge Array and doing a lot of computations. Then we may have other computed properties that in turn depend on **A**. Without caching, we would be executing **A**’s getter many more times than necessary! In cases where you do not want caching, use a method instead.
111+
Pourquoi avons-nous besoin de mettre en cache ? Imaginez que nous avons une propriété calculée coûteuse **A**, qui exige une boucle dans un énorme tableau et qui fait beaucoup de calculs. Alors nous pouvons avoir d’autres propriétés calculées qui dépendent à leur tour de **A**. Sans la mise en cache, nous exécuterions l'accesseur de **A** autant de fois que nécessaire ! Dans les cas où vous ne souhaitez pas la mise en cache, utilisez une méthode à la place.
112112

113-
### Computed vs Watched Property
113+
### Propriétés calculées vs observées
114114

115-
Vue does provide a more generic way to observe and react to data changes on a Vue instance: **watch properties**. When you have some data that needs to change based on some other data, it is tempting to overuse `watch` - especially if you are coming from an AngularJS background. However, it is often a better idea to use a computed property rather than an imperative `watch` callback. Consider this example:
115+
Vue fournit une façon plus générique d'observer et de réagir aux changements de données sur une instance de Vue : **les propriétés watch**. Quand vous avez des données qu'il faut changer selon d'autres données, il est tentant d'abuser de `watch` (surtout si vous venez du monde d'AngularJS). Toutefois, il est souvent préférable d’utiliser une propriété calculée et non une fonction de retour impérative comme `watch`. Considérez cet exemple :
116116

117117
``` html
118118
<div id="demo">{{ fullName }}</div>
@@ -137,7 +137,7 @@ var vm = new Vue({
137137
})
138138
```
139139

140-
The above code is imperative and repetitive. Compare it with a computed property version:
140+
Le code ci-dessus est impératif et répétitif. Comparez-le avec une version de propriété calculée :
141141

142142
``` js
143143
var vm = new Vue({
@@ -154,21 +154,21 @@ var vm = new Vue({
154154
})
155155
```
156156

157-
Much better, isn't it?
157+
C'est mieux, n'est-ce pas ?
158158

159-
### Computed Setter
159+
### Mutateur calculé
160160

161-
Computed properties are by default getter-only, but you can also provide a setter when you need it:
161+
Les propriétés calculées ont par défaut uniquement un accesseur, mais vous pouvez également fournir un mutateur (setter) quand vous en avez besoin :
162162

163163
``` js
164164
// ...
165165
computed: {
166166
fullName: {
167-
// getter
167+
// accesseur
168168
get: function () {
169169
return this.firstName + ' ' + this.lastName
170170
},
171-
// setter
171+
// mutateur
172172
set: function (newValue) {
173173
var names = newValue.split(' ')
174174
this.firstName = names[0]
@@ -179,71 +179,71 @@ computed: {
179179
// ...
180180
```
181181

182-
Now when you run `vm.fullName = 'John Doe'`, the setter will be invoked and `vm.firstName` and `vm.lastName` will be updated accordingly.
182+
Maintenant, lorsque vous exécutez `vm.fullName = 'John Doe'`, le mutateur sera invoqué, `vm.firstName` et `vm.lastName` seront mis à jour en conséquence.
183183

184-
## Watchers
184+
## Observateurs
185185

186-
While computed properties are more appropriate in most cases, there are times when a custom watcher is necessary. That's why Vue provides a more generic way to react to data changes through the `watch` option. This is most useful when you want to perform asynchronous or expensive operations in response to changing data.
186+
Bien que les propriétés calculées soient plus appropriées dans la plupart des cas, parfois un observateur personnalisé est nécessaire. C'est pour cela que Vue fournit une façon plus générique de réagir aux changements de données à travers l'option `watch`. Ceci est très utile lorsque vous souhaitez exécuter des opérations asynchrones ou coûteuses en réponse à des données changeantes.
187187

188-
For example:
188+
Par exemple :
189189

190190
``` html
191191
<div id="watch-example">
192192
<p>
193-
Ask a yes/no question:
193+
Posez votre question (réponse par Oui ou Non) :
194194
<input v-model="question">
195195
</p>
196196
<p>{{ answer }}</p>
197197
</div>
198198
```
199199

200200
``` html
201-
<!-- Since there is already a rich ecosystem of ajax libraries -->
202-
<!-- and collections of general-purpose utility methods, Vue core -->
203-
<!-- is able to remain small by not reinventing them. This also -->
204-
<!-- gives you the freedom to just use what you're familiar with. -->
201+
<!-- Puisqu'il y a déjà un riche écosystème de bibliothèques ajax -->
202+
<!-- et de collections de méthodes d'utilité générale, en ne les -->
203+
<!-- réinventant pas, le noyau de Vue peut rester petit. Cela vous -->
204+
<!-- donne aussi la liberté d’utiliser tout ce qui vous est familier. -->
205205
<script src="https://unpkg.com/[email protected]/dist/axios.min.js"></script>
206206
<script src="https://unpkg.com/[email protected]/lodash.min.js"></script>
207207
<script>
208208
var watchExampleVM = new Vue({
209209
el: '#watch-example',
210210
data: {
211211
question: '',
212-
answer: 'I cannot give you an answer until you ask a question!'
212+
answer: 'Je ne peux pas vous donner une réponse avant que vous ne posiez une question !'
213213
},
214214
watch: {
215-
// whenever question changes, this function will run
215+
// à chaque fois que la question change, cette fonction s'exécutera
216216
question: function (newQuestion) {
217-
this.answer = 'Waiting for you to stop typing...'
217+
this.answer = "J'attends que vous arrêtiez de taper..."
218218
this.getAnswer()
219219
}
220220
},
221221
methods: {
222-
// _.debounce is a function provided by lodash to limit how
223-
// often a particularly expensive operation can be run.
224-
// In this case, we want to limit how often we access
225-
// yesno.wtf/api, waiting until the user has completely
226-
// finished typing before making the ajax request. To learn
227-
// more about the _.debounce function (and its cousin
228-
// _.throttle), visit: https://lodash.com/docs#debounce
222+
// _.debounce est une fonction fournie par lodash pour limiter la fréquence
223+
// d'exécution d'une opération particulièrement coûteuse.
224+
// Dans ce cas, nous voulons limiter la fréquence d'accès à
225+
// yesno.wtf/api, en attendant que l'utilisateur ait complètement
226+
// fini de taper avant de faire la requête ajax. Pour en savoir
227+
// plus sur la fonction _.debounce (et sa cousine
228+
// _.throttle), visitez : https://lodash.com/docs#debounce
229229
getAnswer: _.debounce(
230230
function () {
231231
if (this.question.indexOf('?') === -1) {
232-
this.answer = 'Questions usually contain a question mark. ;-)'
232+
this.answer = "Les questions contiennent généralement un point d'interrogation. ;-)"
233233
return
234234
}
235-
this.answer = 'Thinking...'
235+
this.answer = 'Je réfléchis...'
236236
var vm = this
237237
axios.get('https://yesno.wtf/api')
238238
.then(function (response) {
239239
vm.answer = _.capitalize(response.data.answer)
240240
})
241241
.catch(function (error) {
242-
vm.answer = 'Error! Could not reach the API. ' + error
242+
vm.answer = "Erreur ! Impossible d'accéder à l'API." + error
243243
})
244244
},
245-
// This is the number of milliseconds we wait for the
246-
// user to stop typing.
245+
// C'est le nombre de millisecondes que nous attendons
246+
// pour que l’utilisateur arrête de taper.
247247
500
248248
)
249249
}
@@ -256,7 +256,7 @@ Result:
256256
{% raw %}
257257
<div id="watch-example" class="demo">
258258
<p>
259-
Ask a yes/no question:
259+
Posez votre question (réponse par Oui ou Non) :
260260
<input v-model="question">
261261
</p>
262262
<p>{{ answer }}</p>
@@ -268,11 +268,11 @@ var watchExampleVM = new Vue({
268268
el: '#watch-example',
269269
data: {
270270
question: '',
271-
answer: 'I cannot give you an answer until you ask a question!'
271+
answer: 'Je ne peux pas vous donner une réponse avant que vous ne posiez une question !'
272272
},
273273
watch: {
274274
question: function (newQuestion) {
275-
this.answer = 'Waiting for you to stop typing...'
275+
this.answer = "J'attends que vous arrêtiez de taper..."
276276
this.getAnswer()
277277
}
278278
},
@@ -281,16 +281,16 @@ var watchExampleVM = new Vue({
281281
function () {
282282
var vm = this
283283
if (this.question.indexOf('?') === -1) {
284-
vm.answer = 'Questions usually contain a question mark. ;-)'
284+
vm.answer = "Les questions contiennent généralement un point d'interrogation. ;-)"
285285
return
286286
}
287-
vm.answer = 'Thinking...'
287+
vm.answer = 'Je réfléchis...'
288288
axios.get('https://yesno.wtf/api')
289289
.then(function (response) {
290290
vm.answer = _.capitalize(response.data.answer)
291291
})
292292
.catch(function (error) {
293-
vm.answer = 'Error! Could not reach the API. ' + error
293+
vm.answer = "Erreur ! Impossible d'accéder à l'API." + error
294294
})
295295
},
296296
500
@@ -300,6 +300,6 @@ var watchExampleVM = new Vue({
300300
</script>
301301
{% endraw %}
302302

303-
In this case, using the `watch` option allows us to perform an asynchronous operation (accessing an API), limit how often we perform that operation, and set intermediary states until we get a final answer. None of that would be possible with a computed property.
303+
Dans ce cas, l'utilisation de l'option `watch` nous permet d'effectuer une opération asynchrone (accéder à une API), de limiter la fréquence d'exécution de cette opération et de définir des états intermédiaires jusqu'à ce que nous obtenions une réponse finale. Rien de tout cela ne serait possible avec une propriété calculée.
304304

305-
In addition to the `watch` option, you can also use the imperative [vm.$watch API](../api/#vm-watch).
305+
En plus de l'option `watch`, vous pouvez aussi utiliser [l'API vm.$watch](../api/#vm-watch).

0 commit comments

Comments
 (0)