Skip to content

Commit ffd7d82

Browse files
committed
Merge remote-tracking branch 'upstream/master'
# Conflicts resolved: # package.json # src/resources/partners.md # src/v2/cookbook/client-side-storage.md # src/v2/cookbook/form-validation.md # src/v2/examples/todomvc.md # src/v2/guide/forms.md # src/v2/guide/index.md # src/v2/guide/list.md # src/v2/guide/migration.md # src/v2/guide/reactivity.md # src/v2/guide/single-file-components.md # themes/vue/_config.yml # themes/vue/layout/index.ejs Signed-off-by: Haeresis <[email protected]>
2 parents 2f6ef4e + d8be61a commit ffd7d82

File tree

100 files changed

+3167
-279
lines changed

Some content is hidden

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

100 files changed

+3167
-279
lines changed

_config.yml

+5
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ pagination_dir: page
7777
# Disqus
7878
disqus_shortname:
7979

80+
# Include/Exclude Files/Folders
81+
exclude:
82+
## Exclude example code from Nunjucks
83+
- "v2/examples/vue-20-*/*"
84+
8085
# Extensions
8186
## Plugins: https://github.com/hexojs/hexo/wiki/Plugins
8287
## Themes: https://github.com/hexojs/hexo/wiki/Themes

assets/why-vue/arabic.js.srt

+1-1
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ H2 إلى قائمة غير مرتبة،
411411

412412
94
413413
00:03:57,460 --> 00:03:59,850
414-
دعنا نلغي ​​العنصر الأخير من المصفوفة
414+
دعنا نلغي العنصر الأخير من المصفوفة
415415

416416
95
417417
00:03:59,850 --> 00:04:01,828

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "vuejs.org",
33
"private": true,
44
"hexo": {
5-
"version": "3.7.1"
5+
"version": "3.8.0"
66
},
77
"scripts": {
88
"start": "hexo server",

src/images/logo-vuemastery.svg

+22
Loading

src/resources/partners.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ partners_list:
1111
name: Vehikl
1212
logo: vehikl.png
1313
description:
14-
Vehikl is a software consultancy specialising in PHP and JavaScript. We build best-in-class web applications written with popular frameworks such as Laravel, Express, NestJS, Vue, and React. Think of us as an extension of your team.
14+
(EN) Vehikl is a software consultancy specialising in PHP and JavaScript. We build best-in-class web applications written with popular frameworks such as Laravel, Express, NestJS, Vue, and React. Think of us as an extension of your team.
1515
proficiencies:
1616
- VueJs
1717
- Laravel
@@ -42,11 +42,11 @@ partners_list:
4242
name: Modus Create
4343
logo: https://res.cloudinary.com/modus-labs/image/upload/v1533109874/modus/logo-vertical-black.svg
4444
description:
45-
"(EN) Modus Create is a disruptive consulting firm that helps companies transform for success in the digital future.
46-
47-
Clients work with Modus to effect transformational change through a unique collaborative engagement model that focuses on strategy, product design/build, user experience, company culture, and process change to accelerate their response to digital disruption.
48-
49-
Modus is uniquely expert at executing within the new reality of global talent sourcing and globally distributed teams. Modus culture is based on recruiting only top talent regardless of their location. Modus delivers time zone-aligned, highly productive, English-speaking teams, accessibility, and a totally collaborative environment regardless of individual location.
45+
"(EN) Modus Create is a disruptive consulting firm that helps companies transform for success in the digital future.
46+
47+
Clients work with Modus to effect transformational change through a unique collaborative engagement model that focuses on strategy, product design/build, user experience, company culture, and process change to accelerate their response to digital disruption.
48+
49+
Modus is uniquely expert at executing within the new reality of global talent sourcing and globally distributed teams. Modus culture is based on recruiting only top talent regardless of their location. Modus delivers time zone-aligned, highly productive, English-speaking teams, accessibility, and a totally collaborative environment regardless of individual location.
5050
"
5151
proficiencies:
5252
- name: Vue.js
@@ -94,7 +94,7 @@ partners_list:
9494
name: Monterail
9595
logo: Monterail.png
9696
description:
97-
"Monterail is a full-service software development company with 100+ experts on board delivering meaningful software for start-ups, SMBs and enterprises. We build for the Web with Ruby on Rails, Python, JavaScript, and Agile. We guarantee this: a product so qualitative and aligned with your vision, you’ll swear it was built in-house."
97+
"(EN) Monterail is a full-service software development company with 110+ experts on board delivering meaningful software for start-ups, SMBs and enterprises. We are organizers of the first official Vue-related conference in the world and authors of the State of Vue.js report (2017&2019). Our experts delivered 30 Vue.js-based projects so far."
9898
proficiencies:
9999
- name: VueJs
100100
url: https://hi.monterail.co/2NqPUa6
@@ -105,15 +105,15 @@ partners_list:
105105
- name: Python
106106
url: https://hi.monterail.co/2MXHLeb
107107
- name: Services
108-
url: https://www.monterail.com/services
108+
url: https://www.monterail.com/services?utm_medium=referral&utm_source=partner-list&utm_campaign=vue.js
109109
- name: Projects
110-
url: https://www.monterail.com/projects
110+
url: https://www.monterail.com/projects?utm_medium=referral&utm_source=partner-list&utm_campaign=vue.js
111111
location: Wrocław, Poland
112112
languages:
113113
- English
114114
- Polish
115115
url_text: www.monterail.com
116-
url_link: www.monterail.com/?utm_campaign=Vue.js&utm_source=partner-list
116+
url_link: www.monterail.com/services/vue-development?utm_campaign=Vue.js&utm_source=partner-list
117117
hire_url: www.monterail.com/contact
118118
119119
social_links:
@@ -141,7 +141,7 @@ partners_list:
141141
name: Rangle
142142
logo: https://res.cloudinary.com/rangle/image/upload/q_auto,f_auto/vuejs.org/rangle_black_lockup_n6q48z.png
143143
description:
144-
"Rangle is a global digital consultancy that helps ambitious organizations outperform the competition in the most demanding markets. We work closely with our clients as one team to imagine, design, and deliver human-centered digital experiences that create lasting results and real business value. Anchored in innovation and lean startup best-practices, our unique delivery and partnership model is purposed-built to this task."
144+
"(EN) Rangle is a global digital consultancy that helps ambitious organizations outperform the competition in the most demanding markets. We work closely with our clients as one team to imagine, design, and deliver human-centered digital experiences that create lasting results and real business value. Anchored in innovation and lean startup best-practices, our unique delivery and partnership model is purposed-built to this task."
145145
proficiencies:
146146
- name: Building Products
147147
url: https://rangle.io/#build-a-product/?utm_source=referral&utm_medium=partner&utm_campaign=vue-partners

src/v2/api/index.md

+1
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,7 @@ type: api
684684
handler: 'uneMéthode',
685685
immediate: true
686686
},
687+
// vous pouvez passer un tableau de fonctions de rappel, elles seront appelées une par une
687688
e: [
688689
'handle1',
689690
function handle2 (valeur, ancienneValeur) { /* ... */ },

src/v2/cookbook/client-side-storage.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,18 @@ const app = new Vue({
3939
});
4040
```
4141

42-
Concentrons-nous sur les parties `mounted` et `watch`. On utilise `mounted` pour récupérer la valeur depuis le localStorage. Pour garder les données en mémoire, on observe la valeur `name` et à chaque changement, on l'écrit dans le localStorage.
42+
Concentrons-nous sur les parties `mounted` et `watch`. On utilise `mounted` pour récupérer la valeur depuis le localStorage. Pour garder les données en mémoire, on observe la valeur `name` et à chaque changement, on l'écrit immédiatement.
4343

4444
Vous pouvez le tester vous-même ici :
4545

46-
<p data-height="265" data-theme-id="0" data-slug-hash="KodaKb" data-default-tab="js,result" data-user="cfjedimaster" data-embed-version="2" data-pen-title="testing localstorage" class="codepen">Voir le Pen <a href="https://codepen.io/cfjedimaster/pen/KodaKb/">test du localstorage</a> par Raymond Camden (<a href="https://codepen.io/cfjedimaster">@cfjedimaster</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
46+
<p data-height="265" data-theme-id="0" data-slug-hash="KodaKb" data-default-tab="js,result" data-user="cfjedimaster" data-embed-version="2" data-pen-title="testing localstorage" class="codepen">Voir le Pen <a href="https://codepen.io/cfjedimaster/pen/KodaKb/">test du localstorage</a> par Raymond Camden (<a href="https://codepen.io/cfjedimaster">@cfjedimaster</a>) sur <a href="https://codepen.io">CodePen</a> (EN).</p>
4747
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
4848

4949
Écrivez quelque chose dans le formulaire et rechargez la page. Vous remarquerez que la valeur que vous aviez écrite s'affichera automatiquement. N'oubliez pas que votre navigateur a d'excellents outils de développement pour inspecter le stockage côté client. Voici un exemple sur Firefox :
5050

5151
![Stockage devtools sur Firefox](/images/devtools-storage.png)
5252

53-
Ici sur Chrome :
53+
Et ici sur Chrome :
5454

5555
![Stockage devtools sur Chrome](/images/devtools-storage-chrome.png)
5656

@@ -95,15 +95,15 @@ const app = new Vue({
9595
persist() {
9696
localStorage.name = this.name;
9797
localStorage.age = this.age;
98-
console.log('now pretend I did more stuff...');
98+
console.log('maintenant prétendre que j\'ai fait plus de choses...');
9999
}
100100
}
101101
})
102102
```
103103

104104
Comme avant, `mounted` est utilisé pour charger les données, si elles existent. Cette fois, les données sont sauvées seulement si le bouton est cliqué. On pourrait aussi faire des validations ou transformations ici avant de stocker les données. On pourrait aussi stocker une date représentant le moment ou les données ont été sauvées. Avec ces métadonnées, la fonction `mounted` pourrait vérifier si il faut encore stocker les valeurs. Vous pouvez essayer cette version ci-dessous.
105105

106-
<p data-height="265" data-theme-id="0" data-slug-hash="rdOjLN" data-default-tab="js,result" data-user="cfjedimaster" data-embed-version="2" data-pen-title="testing localstorage 2" class="codepen">Voir le Pen <a href="https://codepen.io/cfjedimaster/pen/rdOjLN/">test du localstorage 2</a> par Raymond Camden (<a href="https://codepen.io/cfjedimaster">@cfjedimaster</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
106+
<p data-height="265" data-theme-id="0" data-slug-hash="rdOjLN" data-default-tab="js,result" data-user="cfjedimaster" data-embed-version="2" data-pen-title="testing localstorage 2" class="codepen">Voir le Pen <a href="https://codepen.io/cfjedimaster/pen/rdOjLN/">test du localstorage 2</a> par Raymond Camden (<a href="https://codepen.io/cfjedimaster">@cfjedimaster</a>) sur <a href="https://codepen.io">CodePen</a> (EN).</p>
107107
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
108108

109109
## Travailler avec des valeurs complexes
@@ -122,12 +122,12 @@ Comme mentionné plus haut, le Local Storage marche seulement avec de simples va
122122

123123
<p>
124124
<input v-model="newCat">
125-
<button @click="addCat">Ajouter un chat</button>
125+
<button @click="addCat"Ajouter un chat</button>
126126
</p>
127127
</div>
128128
```
129129

130-
Cette "app" contient une simple liste (avec un bouton pour enlever un chat) et un petit formulaire pour ajouter un nouveau chat. Maintenant regardons le JavaScript.
130+
Cette « app » contient une simple liste (avec un bouton pour enlever un chat) et un petit formulaire pour ajouter un nouveau chat. Maintenant regardons le JavaScript.
131131

132132
``` js
133133
const app = new Vue({
@@ -172,7 +172,7 @@ Dans cette application, on a utilisé l'API Local Storage à la place d'un accè
172172

173173
Nous avons trois méthodes pour s'occuper de nos chats. `addCat` et `removeCat` s'occupent de mettre à jour les données de Vue stockées dans `this.cats`. Ensuite elles appellent `saveCats` qui s'occupe de sérialiser et sauver les données. Vous pouvez vous amuser avec la version ci-dessous :
174174

175-
<p data-height="265" data-theme-id="0" data-slug-hash="qoYbyW" data-default-tab="js,result" data-user="cfjedimaster" data-embed-version="2" data-pen-title="localstorage, complex" class="codepen">Voir le Pen <a href="https://codepen.io/cfjedimaster/pen/qoYbyW/">localstorage, complexe</a> par Raymond Camden (<a href="https://codepen.io/cfjedimaster">@cfjedimaster</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
175+
<p data-height="265" data-theme-id="0" data-slug-hash="qoYbyW" data-default-tab="js,result" data-user="cfjedimaster" data-embed-version="2" data-pen-title="localstorage, complex" class="codepen">Voir le Pen <a href="https://codepen.io/cfjedimaster/pen/qoYbyW/">localstorage plus complexe</a> par Raymond Camden (<a href="https://codepen.io/cfjedimaster">@cfjedimaster</a>) sur <a href="https://codepen.io">CodePen</a> (EN).</p>
176176
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
177177

178178
## Modèles alternatifs

src/v2/cookbook/debugging-in-vscode.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Cliquez sur l'icône Débogage dans la barre d'activités pour afficher la vue D
5959
"webRoot": "${workspaceFolder}/src",
6060
"breakOnLoad": true,
6161
"sourceMapPathOverrides": {
62-
"webpack:///./src/*": "${webRoot}/*"
62+
"webpack:///src/*": "${webRoot}/*"
6363
}
6464
},
6565
{

src/v2/cookbook/form-validation.md

+23-18
Original file line numberDiff line numberDiff line change
@@ -333,21 +333,27 @@ Nous avons défini le total comme une valeur calculée et la méthode checkForm
333333

334334
## Validation côté serveur
335335

336-
Dans mon dernier exemple, nous allons construire une application vuejs qui utilise Ajax pour valider des données via le serveur. Le formulaire va vous demander de nommer un nouveau produit et ensuite s'assurer que ce nom est unique. Nous avons écrit une rapide [OpenWhisk](http://openwhisk.apache.org/) action sans serveur pour gérer la validation, voici la logique de cette action.
336+
Dans mon dernier exemple, nous allons construire quelque chose qui utilise Ajax pour valider des données via le serveur. Le formulaire va vous demander de nommer un nouveau produit et ensuite s'assurer que ce nom est unique. Nous avons écrit une rapide [Netlify]((https://netlify.com/) action sans serveur pour gérer la validation, voici la logique de cette action.
337337

338338
``` js
339-
function main(args) {
340-
return new Promise((resolve, reject) => {
341-
// bad product names: vista, empire, mbp
342-
const badNames = ['vista', 'empire', 'mbp'];
339+
exports.handler = async (event, context) => {
340+
341+
const badNames = ['vista', 'empire', 'mbp'];
342+
const name = event.queryStringParameters.name;
343+
344+
if (badNames.includes(name)) {
345+
return {
346+
statusCode: 400,
347+
body: JSON.stringify({error: 'Invalid name passed.'})
348+
}
349+
}
343350

344-
if (badNames.includes(args.name)) {
345-
reject({error: 'Existing product'});
346-
}
351+
return {
352+
statusCode: 204
353+
}
347354

348-
resolve({status: 'ok'});
349-
});
350355
}
356+
351357
```
352358

353359
En gros, tous les noms exceptés "vista", "empire", and "mbp" sont valides. Bien, regardons donc le formulaire.
@@ -389,7 +395,7 @@ En gros, tous les noms exceptés "vista", "empire", and "mbp" sont valides. Bien
389395
Il n'y a rien de bien spécial ici. Voyons maintenant le JavaScript.
390396

391397
``` js
392-
const apiUrl = 'https://openwhisk.ng.bluemix.net/api/v1/web/rcamden%40us.ibm.com_My%20Space/safeToDelete/productName.json?name=';
398+
const apiUrl = 'https://vuecookbook.netlify.com/.netlify/functions/product-name?name=';
393399

394400
const app = new Vue({
395401
el: '#app',
@@ -407,13 +413,12 @@ const app = new Vue({
407413
this.errors.push('Product name is required.');
408414
} else {
409415
fetch(apiUrl + encodeURIComponent(this.name))
410-
.then(res => res.json())
411-
.then(res => {
412-
if (res.error) {
413-
this.errors.push(res.error);
414-
} else {
415-
           // redirect to a new URL, or do something on success
416-
alert('ok!');
416+
.then(async res => {
417+
if (res.status === 204) {
418+
alert('OK');
419+
} else if (res.status === 400) {
420+
let errorResponse = await res.json();
421+
this.errors.push(errorResponse.error);
417422
}
418423
});
419424
}

src/v2/examples/commits.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ order: 1
66

77
> Cet exemple récupère les dernières informations de commits de Vue.js depuis l'API GitHub et les affiche sous forme de liste. Vous pouvez basculer entre l'affichage des branches master et dev.
88
9-
<iframe width="100%" height="500" src="https://jsfiddle.net/yyx990803/c5g8xnar/embedded/result,html,js,css" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
9+
<iframe src="https://codesandbox.io/embed/github/vuejs/vuejs.org/tree/master/src/v2/examples/vue-20-github-commits?codemirror=1&hidedevtools=1&hidenavigation=1&theme=light" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="vue-20-template-compilation" allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"></iframe>

src/v2/examples/deepstream.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ order: 9
66

77
> Cet exemple utilise [deepstreamHub](https://deepstreamhub.com/) pour synchroniser les données en temps réel, émettre des évènements et faire de l'interaction distante entre clients (vous pouvez l'ouvrir dans plusieurs fenêtres de navigateurs).
88
9-
<iframe width="100%" height="500" src="https://jsfiddle.net/yyx990803/ff0sp9hw/embedded/result,html,js,css" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
9+
<iframe src="https://codesandbox.io/embed/github/vuejs/vuejs.org/tree/master/src/v2/examples/vue-20-realtime-with-deepstreamhub?codemirror=1&hidedevtools=1&hidenavigation=1&theme=light" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="vue-20-template-compilation" allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"></iframe>

src/v2/examples/elastic-header.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ type: examples
44
order: 7
55
---
66

7-
<iframe width="100%" height="500" src="https://jsfiddle.net/yyx990803/y91wy85p/embedded/result,html,js,css" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
7+
<iframe src="https://codesandbox.io/embed/github/vuejs/vuejs.org/tree/master/src/v2/examples/vue-20-elastic-header?codemirror=1&hidedevtools=1&hidenavigation=1&theme=light" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="vue-20-template-compilation" allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"></iframe>

0 commit comments

Comments
 (0)