From 2cabcd98ca925f0682638a49ee23269b8a27f71f Mon Sep 17 00:00:00 2001 From: Bruno Lesieur Date: Sat, 4 Mar 2017 18:40:56 +0100 Subject: [PATCH 01/12] Traduction : components.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traduction complète du fichier `components.md` --- src/v2/guide/components.md | 586 +++++++++++++++++-------------------- 1 file changed, 273 insertions(+), 313 deletions(-) diff --git a/src/v2/guide/components.md b/src/v2/guide/components.md index 710babd4f6..021f3087b6 100644 --- a/src/v2/guide/components.md +++ b/src/v2/guide/components.md @@ -1,18 +1,18 @@ --- -title: Components +title: Composants type: guide order: 11 --- -## What are Components? +## Les composants, qu’est-ce que c’est ? -

**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).**

Components are one of the most powerful features of Vue. They help you extend basic HTML elements to encapsulate reusable code. At a high level, components are custom elements that Vue's compiler attaches behavior to. In some cases, they may also appear as a native HTML element extended with the special `is` attribute. +Les composants sont l'une des plus puissantes fonctionnalités de Vue. Ils vous aide à étendre les éléments de base du HTML en encapsulant du code ré-utilisable. À un haut niveau, les composants sont des éléments personnalisables auxquels le compilateur de Vue attache un comportement. Dans plusieurs cas, ils peuvent apparaitre comme des éléments HTML natif étendu avec l'attribut spécial `is`. -## Using Components +## Utilisation des composants -### Registration +### Enregistrement -We've learned in the previous sections that we can create a new Vue instance with: +Nous avons appris dans les sections précédentes que nous pouvions créer une nouvelle instance de Vue avec : ``` js new Vue({ @@ -21,7 +21,7 @@ new Vue({ }) ``` -To register a global component, you can use `Vue.component(tagName, options)`. For example: +Pour enregistrer un composant global, vous pouvez utiliser `Vue.component(tagName, options)`. Par exemple : ``` js Vue.component('my-component', { @@ -29,9 +29,9 @@ Vue.component('my-component', { }) ``` -

Note that Vue does not enforce the [W3C rules](http://www.w3.org/TR/custom-elements/#concepts) for custom tag names (all-lowercase, must contain a hyphen) though following this convention is considered good practice.

+

Notez que Vue ne force pas l'utilisation des [règles du W3C](http://www.w3.org/TR/custom-elements/#concepts) en ce qui concerne les noms de balises personnalisées (tout-minuscule, avec obligation de contenir un trait d'union) cependant suivre cette convention est considéré comme une bonne pratique.

-Once registered, a component can be used in an instance's template as a custom element, ``. Make sure the component is registered **before** you instantiate the root Vue instance. Here's the full example: +Une fois enregistré, un composant peut être utilisé dans une instance de template en tant qu'élément personnalisé, ``. Assurez-vous que le composant soit enregistré **avant** l'instanciation de l'instance racine de Vue. Voici un exemple complet : ``` html
@@ -40,22 +40,22 @@ Once registered, a component can be used in an instance's template as a custom e ``` ``` js -// register +// enregistrer Vue.component('my-component', { - template: '
A custom component!
' + template: '
Un élément personnalisé !
' }) -// create a root instance +// créer une instance racine new Vue({ el: '#example' }) ``` -Which will render: +Ce qui va faire le rendu : ``` html
-
A custom component!
+
Un élément personnalisé !
``` @@ -65,37 +65,37 @@ Which will render:
{% endraw %} -### Local Registration +### Enregistrement local -You don't have to register every component globally. You can make a component available only in the scope of another instance/component by registering it with the `components` instance option: +Vous n'avez pas à enregistrer chaque composant de manière global. Vous pouvez rendre un composant disponible dans la portée d'un(e) autre instance/composant en l'enregistrant avec l'option d'instanciation `components` : ``` js var Child = { - template: '
A custom component!
' + template: '
Un élément personnalisé !
' } new Vue({ // ... components: { - // will only be available in parent's template + // ne sera disponible que dans le template parent 'my-component': Child } }) ``` -The same encapsulation applies for other registerable Vue features, such as directives. +La même encapsulation est appliqué pour les autres fonctionnalités enregistrables de Vue, comme les directives. -### DOM Template Parsing Caveats +### Limitations d'analyse d'un template à partir du DOM -When using the DOM as your template (e.g. using the `el` option to mount an element with existing content), you will be subject to some restrictions that are inherent to how HTML works, because Vue can only retrieve the template content **after** the browser has parsed and normalized it. Most notably, some elements such as `
    `, `
      `, `` and `
      ` et `
      @@ -103,7 +103,7 @@ This will lead to issues when using custom components with elements that have su
      ``` -The custom component `` will be hoisted out as invalid content, thus causing errors in the eventual rendered output. A workaround is to use the `is` special attribute: +Le composant personnalisé `` va être évalué comme un contenu invalide, ce qui va causer des erreurs dans les éventuels rendus de sortie. Une solution de contournement est d'utiliser l'attribut spécial `is` : ``` html @@ -111,28 +111,28 @@ The custom component `` will be hoisted out as invalid content, thus cau
      ``` -**It should be noted that these limitations do not apply if you are using string templates from one of the following sources**: +**Il est a noter que ces limitations n'existe pas si vous utiliser des templates sous forme de chaîne de caractère en provenance d'une des sources suivantes** : - ` {% endraw %} -Since all three component instances share the same `data` object, incrementing one counter increments them all! Ouch. Let's fix this by instead returning a fresh data object: +Puisque nos trois instances de composant partage le même objet `data`, incrémenter un compteur les incrémentera tous ! Aïl. Réglons ça en retournant plutôt un objet de donnée tout frait : ``` js data: function () { @@ -190,7 +190,7 @@ data: function () { } ``` -Now all our counters each have their own internal state: +Maintenant tous nos compteurs ont leur propre état interne : {% raw %}
      @@ -213,45 +213,45 @@ new Vue({ {% endraw %} -### Composing Components +### Composition de composants -Components are meant to be used together, most commonly in parent-child relationships: component A may use component B in its own template. They inevitably need to communicate to one another: the parent may need to pass data down to the child, and the child may need to inform the parent of something that happened in the child. However, it is also very important to keep the parent and the child as decoupled as possible via a clearly-defined interface. This ensures each component's code can be written and reasoned about in relative isolation, thus making them more maintainable and potentially easier to reuse. +Les composants sont destinés à être utilisés ensemble, le plus souvent dans une relation parent-enfant : le composant A peut utiliser le composant B dans son propre template. Ils vont inévitablement avoir besoin de communiquer les uns avec les autres : le parent peut avoir besoin de passer des données à son enfant, et l'enfant peut avoir besoin d'informer le parent que quelque chose c'est produit à l'intérieur. Cependant, il est également très important de garder le parent et l'enfant aussi découplé que possible via une interface clairement définie. Cela assure que le code de chaque composant peut être écrit et raisonner à propos de sa propre isolation relative [se suffire à lui même], cela les rends plus maintenable et potentiellement plus simple à ré-utiliser. -In Vue.js, the parent-child component relationship can be summarized as **props down, events up**. The parent passes data down to the child via **props**, and the child sends messages to the parent via **events**. Let's see how they work next. +Dans Vue.js, la relation parent-enfant peut être résumé ainsi comme **descente de props, remonté d'événements**. Le parent passe les données à l'enfant via les **props**, et l'enfant envoi des messages à son parent via les **événements**. Voyez comment cela fonctionne ci-dessous.

      - props down, events up + descente de props, remonté d'événements

      ## Props -### Passing Data with Props +### Passer des données avec props -Every component instance has its own **isolated scope**. This means you cannot (and should not) directly reference parent data in a child component's template. Data can be passed down to child components using **props**. +Chaque instance de composant a sa propre **portée isolée**. Cela siginifie qu'on ne peut (et ne devrait pas) directement référencer des données dans un template de composant enfant. Les données doivent être passée aux composants enfant en utilisant **props**. -A prop is a custom attribute for passing information from parent components. A child component needs to explicitly declare the props it expects to receive using the [`props` option](../api/#props): +Une prop est un attribut personnalisé pour passer des informations depuis un composant parent. Un composant enfant a besoin de déclarer spécifiquement quels sont les props qu'il s'attend à recevoir en utilisant [l'option `props`](../api/#props) : ``` js Vue.component('child', { - // declare the props + // declarer les props props: ['message'], - // just like data, the prop can be used inside templates - // and is also made available in the vm as this.message + // tout comme les data, une prop peut être utilisée à l'intérieur de templates + // et est également disponible dans le vm en tant que this.message template: '{{ message }}' }) ``` -Then we can pass a plain string to it like so: +Alors nous pouvons lui passer une chaîne de caractère littérale comme suit : ``` html - + ``` -Result: +Resultat : {% raw %}
      - +
      {% endraw %} -### Literal vs. Dynamic +### Littéral vs. Dynamique -A common mistake beginners tend to make is attempting to pass down a number using the literal syntax: +Une erreur répendu chez lesdébutants est qu'ils essaient de passer un nombre en utilisant la syntaxe littéral : ``` html - + ``` -However, since this is a literal prop, its value is passed down as a plain string `"1"` instead of an actual number. If we want to pass down an actual JavaScript number, we need to use `v-bind` so that its value is evaluated as a JavaScript expression: +Cependant, puisque c'est une prop littérale, sa valeur est passé en tant que chaîne de caractère littérale `"1"` au lieu d'être un nombre. Si nous voulons passer un nombre JavaScript, nous avons besoin d'utiliser `v-bind` ainsi sa valeur est évaluée en tant qu'expression JavaScript : ``` html - + ``` -### One-Way Data Flow +### Flux de données unidirectionnel -All props form a **one-way-down** binding between the child property and the parent one: when the parent property updates, it will flow down to the child, but not the other way around. This prevents child components from accidentally mutating the parent's state, which can make your app's data flow harder to reason about. +Toutes les props forme une liaison **descendante unidirectionnelle** entre la propriété de l'enfant et celle du parent : quand la propriété parente est mise à jour, cela est signalé à l'enfant, mais d'aucune autre façon. Cela empèche l'enfant de changer l'état du parent, ce qui rendrait le flux de données de votre application difficile à appréhender. -In addition, every time the parent component is updated, all props in the child component will be refreshed with the latest value. This means you should **not** attempt to mutate a prop inside a child component. If you do, Vue will warn you in the console. +De plus, chaque fois que le composant parent est mis à jour, toutes les props dans le composant enfant vont être raffraichis avec les dernières valeurs. Cela signifie qu'il **ne** faut **pas** essayer de changer une prop à l'intérieur d'un composant enfant. Si vous le faites, Vue va vous en avertier dans la console. -There are usually two cases where it's tempting to mutate a prop: +Il y a habituellement deux cas où il est possible de changer une prop : -1. The prop is used to only pass in an initial value, the child component simply wants to use it as a local data property afterwards; +1. La prop est utilisée uniquement pour passer une valeur d'initialisation, le composant veut simplement l'utiliser comme une proprité local à partir de ce moment ; -2. The prop is passed in as a raw value that needs to be transformed. +2. La prop est passé en tant que valeur dans un état qui à besoin d'être transformé. -The proper answer to these use cases are: +La réponse correcte pour ces cas d'utilisation sont : -1. Define a local data property that uses the prop's initial value as its initial value: +1. Définir une propriété locale qui utilise la valeur initial de prop en tant que valeur d'initialisation : ``` js props: ['initialCounter'], @@ -366,7 +366,7 @@ The proper answer to these use cases are: } ``` -2. Define a computed property that is computed from the prop's value: +2. Définir une propriété calculée qui est calculée à partir de la valeur de prop : ``` js props: ['size'], @@ -377,40 +377,40 @@ The proper answer to these use cases are: } ``` -

      Note that objects and arrays in JavaScript are passed by reference, so if the prop is an array or object, mutating the object or array itself inside the child **will** affect parent state.

      +

      Notez que les objets et tableaux en JavaScript sont passés par réference, aussi si la prop est un tableau ou un objet, modifier l'object ou le tableau lui-même à l'intérieur de l'enfant **va** affecter l'état du parent.

      -### Prop Validation +### Validation de prop -It is possible for a component to specify requirements for the props it is receiving. If a requirement is not met, Vue will emit warnings. This is especially useful when you are authoring a component that is intended to be used by others. +Il est possible pour un composant de spécifier les conditions à remplir pour les props qu'il reçopt. Si une condition n'est pas satisfaite, Vue va émettre des alertes. C'est spécialement utile quand vous créer un composant qui a pour vocation d'être utiliser par les autres. -Instead of defining the props as an array of strings, you can use an object with validation requirements: +Au lieu de définir les props en tant que tableau de chaîne de caractère, vous pouvez utiliser un objet en tant que validateur de conditions requises : ``` js Vue.component('example', { props: { - // basic type check (`null` means accept any type) + // vérification basique du type (`null` signifie l'acceptation de n'importe quel type) propA: Number, - // multiple possible types + // types multiple possible propB: [String, Number], - // a required string + // nécéssite une chaîne de caractère propC: { type: String, required: true }, - // a number with default value + // un nombre avec une valeur par défaut propD: { type: Number, default: 100 }, - // object/array defaults should be returned from a - // factory function + // les objets et tableaux par défaut doivent être retournés + // depuis un retour de fonction propE: { type: Object, default: function () { return { message: 'hello' } } }, - // custom validator function + // fonction de validation personnalisée propF: { validator: function (value) { return value > 10 @@ -420,7 +420,7 @@ Vue.component('example', { }) ``` -The `type` can be one of the following native constructors: +Le `type` peut être l'un des constructeurs natifs suivant : - String - Number @@ -429,28 +429,28 @@ The `type` can be one of the following native constructors: - Object - Array -In addition, `type` can also be a custom constructor function and the assertion will be made with an `instanceof` check. +En plus, `type` peut également être une fonction constructeur personnalisée et ainsi l'assertion sera faites avec une vérification `instanceof`. -When a prop validation fails, Vue will produce a console warning (if using the development build). +Quand une validation de prop échoue, Vue va produire un avertissement dans la console (si vous utilisez le build de développement). -## Custom Events +## Événements personnalisés -We have learned that the parent can pass data down to the child using props, but how do we communicate back to the parent when something happens? This is where Vue's custom event system comes in. +Nous avons appris que le parent peut passer des données à l'enfant en utilisant les props, mais comment allons nous informer le parent quand quelque chose arrive ? C'est là que le système d'événement personnalisé de Vue entre en jeu. -### Using `v-on` with Custom Events +### Utilisation de `v-on` avec les événements personnalisés -Every Vue instance implements an [events interface](../api/#Instance-Methods-Events), which means it can: +Chaque instance de Vue implémente une [interface d'événements](../api/#Instance-Methods-Events), cela signifie qu'il peut : -- Listen to an event using `$on(eventName)` -- Trigger an event using `$emit(eventName)` +- Écouter un événement en utilisant `$on(eventName)` +- Déclencher un événement en utilisant `$emit(eventName)` -

      Note that Vue's event system is separate from the browser's [EventTarget API](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget). Though they work similarly, `$on` and `$emit` are __not__ aliases for `addEventListener` and `dispatchEvent`.

      +

      Notez que le système d'événement de Vue est différent de celui du navigateur [EventTarget API](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget). Bien qu'il fonctionne de manière similaire, `$on` and `$emit` __ne__ sont __pas__ des alias pour `addEventListener` et `dispatchEvent`.

      -In addition, a parent component can listen to the events emitted from a child component using `v-on` directly in the template where the child component is used. +De plus, un composant parent peut écouter des événements émis depuis un composant enfant en utilisant `v-on` directement sur le template où le composant enfant est utilisé. -

      You cannot use `$on` to listen to events emitted by children. You must use `v-on` directly in the template, as in the example below.

      +

      Vous ne pouvez pas utiliser `$on` pour écouter les évènements émis par les enfants. Vous devez utiliser `v-on` directement sur le template, comme dans l'exemple ci-dessous.

      -Here's an example: +Voici un exemple : ``` html
      @@ -508,7 +508,7 @@ Vue.component('button-counter', { this.counter += 1 this.$emit('increment') } - } + }, }) new Vue({ el: '#counter-event-example', @@ -524,47 +524,42 @@ new Vue({ {% endraw %} -In this example, it's important to note that the child component is still completely decoupled from what happens outside of it. All it does is report information about its own activity, just in case a parent component might care. +Dans cet exemple, il est important de noter que le composant enfant est toujours complètement découplé de ce qui peut se passer à l'extérieur de lui. Tout ce qu'il rapporte comme information concerne sa propre activité, juste au cas où le composant parent écoutait. -#### Binding Native Events to Components +#### Lié des événements natifs aux composants -There may be times when you want to listen for a native event on the root element of a component. In these cases, you can use the `.native` modifier for `v-on`. For example: +Il y a parfois des fois où vous souhaitez écouter un événement natif sur l'élément racine d'un composant. Dans ce cas, vous devez utiliser le modificateur `.native` sur `v-on`. Par exemple : ``` html ``` -### Form Input Components using Custom Events +### Champ de formulaire des composants utilisant les événements personnalisés -Custom events can also be used to create custom inputs that work with `v-model`. Remember: +Les événements personnalisés peuvent aussi être utilisés pour créer des champs personnalisés qui fonctionne avec `v-model`. Rappeler vous : ``` html ``` -is just syntactic sugar for: +est juste un sucre syntaxique pour : ``` html - + ``` -When used with a component, this simplifies to: +Quand il est utilisé avec un composant, cela peut-être simplifié par : ``` html - - + ``` -So for a component to work with `v-model`, it should (these can be configured in 2.2.0+): +Donc pour qu'un composant fonctionne avec `v-model`, il doit : -- accept a `value` prop -- emit an `input` event with the new value +- accepter une `value` prop. +- émettre un évènement `input` avec la nouvelle valeur. -Let's see it in action with a very simple currency input: +Voyons cela par l'exemple avec un simple champ de devise : ``` html @@ -572,32 +567,33 @@ Let's see it in action with a very simple currency input: ``` js Vue.component('currency-input', { - template: ` - - $ - - - `, + template: '\ + \ + $\ + \ + \ + ', props: ['value'], methods: { - // Instead of updating the value directly, this - // method is used to format and place constraints - // on the input's value + // Au lieu de mettre à jour directement la valeur, + // cette méthode est utilisée pour formater et mettre des contrainte + // sur la valeur d'entrée updateValue: function (value) { var formattedValue = value - // Remove whitespace on either side + // Retirer les espaces de part et d'autre .trim() - // Shorten to 2 decimal places + // Tronquer à deux chiffres après la virgule .slice(0, value.indexOf('.') + 3) - // If the value was not already normalized, - // manually override it to conform + // Si la valeur n'est pas déjà dans le bon format, + // la réécrire manuellement pour qu'elle le soit if (formattedValue !== value) { this.$refs.input.value = formattedValue } - // Emit the number value through the input event + // Émettre la valeur du nombre à travers l'événement input this.$emit('input', Number(formattedValue)) } } @@ -640,67 +636,41 @@ new Vue({ {% endraw %} -The implementation above is pretty naive though. For example, users are allowed to enter multiple periods and even letters sometimes - yuck! So for those that want to see a non-trivial example, here's a more robust currency filter: +L'implémentation ci-dessus est un peu candide tout de même, Par exemple, les utitisateurs peuvent toujours entrer de multiple périodes [???] et même parfois des lettres (beurk) ! Donc pour ce qui souhaiterait voir un exemple non trivial, voici un filtre de devise plus costaux : -### Customizing Component `v-model` - -> New in 2.2.0 - -By default, `v-model` on a component uses `value` as the prop and `input` as the event, but some input types such as checkboxes and radio buttons may want to use the `value` prop for a different purpose. Using the `model` option can avoid the conflict in such cases: - -``` js -Vue.component('my-checkbox', { - model: { - prop: 'checked', - event: 'change' - }, - props: { - // this allows using the `value` prop for a different purpose - value: String - }, - // ... -}) -``` - -``` html - -``` - -The above will be equivalent to: +Les interface d'événement peuvent également être utilisées pour crées des champs plus inhabituels. Par exemple, imaginez cette possibilité : ``` html - - + + + ``` -### Non Parent-Child Communication +### Non communication parent-enfant -Sometimes two components may need to communicate with one-another but they are not parent/child to each other. In simple scenarios, you can use an empty Vue instance as a central event bus: +Parfois deux composants peuvent avoir besoin de communiquer l'un et l'autre mais ne sont pas parent/enfant l'un de l'autre. Dans un simple scénario, vous pouvez utiliser une instance de Vue vide comme bus d'événements central. ``` js var bus = new Vue() ``` ``` js -// in component A's method +// dans la méthode du composant A bus.$emit('id-selected', 1) ``` ``` js -// in component B's created hook +// dans le hook de création de B bus.$on('id-selected', function (id) { // ... }) ``` -In more complex cases, you should consider employing a dedicated [state-management pattern](state-management.html). +Dans des cas plus complexes, vous pouvez envisager l'utilisation d'un [*pattern* de management d'état](state-management.html). -## Content Distribution with Slots +## Distribution de contenu avec des slots -When using components, it is often desired to compose them like this: +Quand on utilise des composants, il est souvent souhaité de les composer comme ceci : ``` html @@ -709,17 +679,17 @@ When using components, it is often desired to compose them like this: ``` -There are two things to note here: +Il y a deux choses à noter ici : -1. The `` component does not know what content may be present inside its mount target. It is decided by whatever parent component that is using ``. +1. Le composant `` ne sais pas quel contenu peut être présent à l'intérieur de sa [cible de montage]. Ceci est défini par n'importe quel composant parent qui utilise ``. -2. The `` component very likely has its own template. +2. Le composant `` à vraisemblablement sont propre template. -To make the composition work, we need a way to interweave the parent "content" and the component's own template. This is a process called **content distribution** (or "transclusion" if you are familiar with Angular). Vue.js implements a content distribution API that is modeled after the current [Web Components spec draft](https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Slots-Proposal.md), using the special `` element to serve as distribution outlets for the original content. +Pour faire fonctionner la composition, nous avons besoin d'un moyen d'entremêler le « contenu » du parent et le template de son propre composant. C'est un processus appelé **distribution de contenu** (ou « transclusion » si vous êtes familier à Angular). Vue.js implémente une API de distribution de contenu construite après le [brouillon de spécification sur les Web Components](https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Slots-Proposal.md), en utilisant l'élément spécial `` pour servir de zone d'attérissage pour le contenu original. -### Compilation Scope +### Portée de compilation -Before we dig into the API, let's first clarify which scope the contents are compiled in. Imagine a template like this: +Avant de rentrer plus profondément dans l'API, clarifions dans quel portée le contenu va être compilé. Imaginez un template comme celui-ci : ``` html @@ -727,25 +697,25 @@ Before we dig into the API, let's first clarify which scope the contents are com ``` -Should the `message` be bound to the parent's data or the child data? The answer is the parent. A simple rule of thumb for component scope is: +`message` devrait t-il être lié aux données du parent ou aux données de l'enfant ? La réponse est au parent. Une règle simple pour la portée de composant est : -> Everything in the parent template is compiled in parent scope; everything in the child template is compiled in child scope. +> Tout dans le template parent est compilé dans la porté parente ; tout dans le template enfant est compilé dans la portée enfant. -A common mistake is trying to bind a directive to a child property/method in the parent template: +Une erreur répandu est d'essayer de lié la directive à une propriété/méthode du template parent : ``` html - + ``` -Assuming `someChildProperty` is a property on the child component, the example above would not work. The parent's template is not aware of the state of a child component. +En admetant que `someChildProperty` est une propriété du composant enfant, l'exemple ci-dessus ne fonctionnerait pas. Le template parent n'est pas au courant de l'état du composant enfant. -If you need to bind child-scope directives on a component root node, you should do so in the child component's own template: +Si vous avez besoin de lié la portée enfant des directives sur un composant de noeud racine, vous devriez faire cela sur le template du composant lui-même : ``` js Vue.component('child-component', { - // this does work, because we are in the right scope - template: '
      Child
      ', + // ceci fonctionne, car nous sommes dans la bonne portée + template: '
      Enfant
      ', data: function () { return { someChildProperty: true @@ -754,58 +724,58 @@ Vue.component('child-component', { }) ``` -Similarly, distributed content will be compiled in the parent scope. +De façon similaire, le contenu distribué est compilé dans la portée parente. -### Single Slot +### Slot unique -Parent content will be **discarded** unless the child component template contains at least one `` outlet. When there is only one slot with no attributes, the entire content fragment will be inserted at its position in the DOM, replacing the slot itself. +Le contenu parent va être **évincé** si le template du composant enfant contient au moins un `` d'atterissage. Quand il n'y a qu'un slot sans aucun attributs, le fragment de contenu entier va être insérer à sa position exact dans le DOM, remplaçant le slot lui-même. -Anything originally inside the `` tags is considered **fallback content**. Fallback content is compiled in the child scope and will only be displayed if the hosting element is empty and has no content to be inserted. +Tout ce qui était contenu à la base dans les balises `` est considéré comme **du contenu par défaut**. Le contenu par défaut est compilé dans le scope enfant et ne sera affiché que si l'élément incluant est vide et qu'il n'y a pas de contenu à insérer. -Suppose we have a component called `my-component` with the following template: +Supposons que nous aillons un composant appelé `my-component` avec le template suivant : ``` html
      -

      I'm the child title

      +

      Je suis un titre enfant

      - This will only be displayed if there is no content - to be distributed. + Ceci ne sera affiché que si il n'y a pas de contenu + à distribuer.
      ``` -And a parent that uses the component: +Et un parent qui utilise le composant : ``` html
      -

      I'm the parent title

      +

      Je suis le titre parent

      -

      This is some original content

      -

      This is some more original content

      +

      Ceci est le contenu original

      +

      Ceci est encore du contenu original

      ``` -The rendered result will be: +Le résultat du rendu serait : ``` html
      -

      I'm the parent title

      +

      Je suis le titre parent

      -

      I'm the child title

      -

      This is some original content

      -

      This is some more original content

      +

      Je suis un titre enfant

      +

      Ceci est le contenu original

      +

      Ceci est encore du contenu original

      ``` -### Named Slots +### Slots nommés -`` elements have a special attribute, `name`, which can be used to further customize how content should be distributed. You can have multiple slots with different names. A named slot will match any element that has a corresponding `slot` attribute in the content fragment. +Les éléments `` on un attribut spécial, `name`, qui peut être utiliser pour personnaliser la façon dont le contenu doit être distribué. Vous pouvez avoir de multiples slots avec des noms différents. Un slot nommé va concorder avec n'importe quel élément possédant l'attribut `slot` correspondant au sein de son fragment de contenu. -There can still be one unnamed slot, which is the **default slot** that serves as a catch-all outlet for any unmatched content. If there is no default slot, unmatched content will be discarded. +Il reste encore un slot non nommé, c'est le **slot par défaut** qui va servir de zone d'attérissage four-tout pour tout contenu ne concordant avec aucun nom. S'il n'y a pas de slot par défaut, le contenu ne concordant pas est évincé. -For example, suppose we have an `app-layout` component with the following template: +Par exemple, supposons que nous ayons un composant `app-layout` avec le template suivant : ``` html
      @@ -821,102 +791,103 @@ For example, suppose we have an `app-layout` component with the following templa
      ``` -Parent markup: +La balise parente : ``` html -

      Here might be a page title

      +

      Ici il devrait y avoir le titre de page

      -

      A paragraph for the main content.

      -

      And another one.

      +

      Un paragraphe pour le contenu principal.

      +

      En un autre.

      -

      Here's some contact info

      +

      Ici plusieurs informations de contact

      ``` -The rendered result will be: +Le résultat du rendu serait : ``` html
      -

      Here might be a page title

      +

      Ici il devrait y avoir le titre de page

      -

      A paragraph for the main content.

      -

      And another one.

      +

      Un paragraphe pour le contenu principal.

      +

      En un autre.

      -

      Here's some contact info

      +

      Ici plusieurs informations de contact

      ``` -The content distribution API is a very useful mechanism when designing components that are meant to be composed together. +L'API de distribution de contenu est un mécanisme vraiment utile quand les composants structuré son destiné à être composé ensemble. -### Scoped Slots +### Slots avec portée -> New in 2.1.0 +> Nouveau en 2.1.0 +Un slot avec portée est un type spéciale de slot dont A scoped slot is a special type of slot that functions as a reusable template (that can be passed data to) instead of already-rendered-elements. -In a child component, simply pass data into a slot as if you are passing props to a component: +Dans un composant enfant, passez simplement les données via le slot de la même manière que vous passeriez des props dans un composant : ``` html
      - +
      ``` -In the parent, a `