element-plus/website/docs/fr-FR/input.md
jeremywu bb2448c571
docs(input): fix/1764-input-documentation (#1765)
- Fix el-input documentation for value binding
2021-04-07 10:45:42 +08:00

20 KiB
Raw Blame History

Input

Le champ d'input de base.

:::warning Input est un composant contrôlé, il affiche toujours la valeur liée de Vue.

En règle générale, l'évènement input devrait être géré. Son handler devrait mettre à jour la valeur du composant (ou utilisez v-model). Dans le cas contraire, la valeur du champ ne sera pas modifiée.

Les modificateurs de v-model ne sont pas supportés. :::

Usage

:::demo

<el-input placeholder="Entrez quelque chose" v-model="input"></el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input: ref('')
    }
  }
})
</script>

:::

Désactivé

:::demo Désactivez l'input avec l'attribut disabled.

<el-input
  placeholder="Entrez quelque chose"
  v-model="input"
  :disabled="true">
</el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input: ref('')
    }
  }
})
</script>

:::

Effaçable

:::demo Rendez l'input effaçable avec l'attribut clearable.

<el-input
  placeholder="Entrez quelque chose"
  v-model="input"
  clearable>
</el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input: ref('')
    }
  }
})
</script>

:::

Champ de mot de passe

:::demo Créez un champ de mot de passe avec icône de visualisation grâce à l'attribut show-password.

<el-input placeholder="Entrez votre mot de passe" v-model="input" show-password></el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input: ref('')
    }
  }
})
</script>

:::

Input avec icône

Ajoutez une icône pour indiquer le type d'input.

:::demo Pour ajouter une icône, vous pouvez utiliser les attributs prefix-icon et suffix-icon. De plus, les slots nommés prefix et suffix fonctionnent aussi.

<div class="demo-input-suffix">
  <span class="demo-input-label">Avec les attributs</span>
  <el-input
    placeholder="Entrez une date"
    suffix-icon="el-icon-date"
    v-model="input1">
  </el-input>
  <el-input
    placeholder="Entrez du texte"
    prefix-icon="el-icon-search"
    v-model="input2">
  </el-input>
</div>
<div class="demo-input-suffix">
  <span class="demo-input-label">Avec les slots</span>
  <el-input
    placeholder="Entrez une date"
    v-model="input3">
    <template #suffix>
      <i class="el-input__icon el-icon-date"></i>
    </template>
  </el-input>
  <el-input
    placeholder="Entrez du texte"
    v-model="input4">
    <template #prefix>
      <i class="el-input__icon el-icon-search"></i>
    </template>
  </el-input>
</div>

<style>
  .demo-input-label {
    display: inline-block;
    width: 130px;
  }
</style>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input1: ref(''),
      input2: ref(''),
      input3: ref(''),
      input4: ref('')
    }
  }
})
</script>

:::

Zone de texte

Une zone de texte de taille réglable à la souris pour écrire plusieurs lignes. Ajoutez l'attribut type="textarea" pour changer input en un textarea natif.

:::demo Réglez la hauteur grâce à la propriété rows.

<el-input
  type="textarea"
  :rows="2"
  placeholder="Entrez quelque chose"
  v-model="textarea">
</el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      textarea: ref('')
    }
  }
})
</script>

:::

Zone de texte avec taille automatique

Configurer la propriété autosize pour une zone de texte permet de rendre la hauteur automatique en fonction de la taille du texte. Un objet options pour être fournit à autosize les nombres minimal et maximal de lignes.

:::demo

<el-input
  type="textarea"
  autosize
  placeholder="Entrez quelque chose"
  v-model="textarea1">
</el-input>
<div style="margin: 20px 0;"></div>
<el-input
  type="textarea"
  :autosize="{ minRows: 2, maxRows: 4}"
  placeholder="Entrez quelque chose"
  v-model="textarea2">
</el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      textarea1: ref(''),
      textarea2: ref('')
    }
  }
})
</script>

:::

Input mixte

Ajouter un élément avant ou après l'input, généralement du texte ou un bouton.

:::demo Utilisez slot pour ajouter des éléments avant ou après l'input.

<div>
  <el-input placeholder="Entrez quelque chose" v-model="input1">
    <template #prepend>Http://</template>
  </el-input>
</div>
<div style="margin-top: 15px;">
  <el-input placeholder="Entrez quelque chose" v-model="input2">
    <template #append>.com</template>
  </el-input>
</div>
<div style="margin-top: 15px;">
  <el-input placeholder="Entrez quelque chose" v-model="input3" class="input-with-select">
    <template #prepend>
      <el-select v-model="select" placeholder="Choisir">
        <el-option label="Restaurant" value="1"></el-option>
        <el-option label="Num. Commande" value="2"></el-option>
        <el-option label="Tel" value="3"></el-option>
      </el-select>
    </template>
    <template #append>
      <el-button icon="el-icon-search"></el-button>
    </template>
  </el-input>
</div>

<style>
  .el-select .el-input {
    width: 110px;
  }
  .input-with-select .el-input-group__prepend {
    background-color: #fff;
  }
</style>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input1: ref(''),
      input2: ref(''),
      input3: ref(''),
      select: ref('')
    }
  }
})
</script>

:::

Tailles

:::demo Ajoutez l'attribut size pour changer la taille de l'input. En plus de la taille par défaut, il y a trois autres options: large, small et mini.

<div class="demo-input-size">
  <el-input
    placeholder="Entrez quelque chose"
    v-model="input1">
  </el-input>
  <el-input
    size="medium"
    placeholder="Entrez quelque chose"
    v-model="input2">
  </el-input>
  <el-input
    size="small"
    placeholder="Entrez quelque chose"
    v-model="input3">
  </el-input>
  <el-input
    size="mini"
    placeholder="Entrez quelque chose"
    v-model="input4">
  </el-input>
</div>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      input1: ref(''),
      input2: ref(''),
      input3: ref(''),
      input4: ref('')
    }
  }
})
</script>

:::

Autocomplétion

Vous pouvez obtenir de l'aide ou des suggestions basées sur ce que vous entrez.

:::demo Le composant d'autocomplétion fournit des suggestions d'entrées. L'attribut fetch-suggestions est une méthode qui retourne les suggestions. Dans cet exemple, querySearch(queryString, cb) renvoie des suggestions à l'autocomplétion via cb(data) quand elles sont prêtes.

<el-row class="demo-autocomplete">
  <el-col :span="12">
    <div class="sub-title">Liste des suggestions au focus</div>
    <el-autocomplete
      class="inline-input"
      v-model="state1"
      :fetch-suggestions="querySearch"
      placeholder="Entrez quelque chose"
      @select="handleSelect"
    ></el-autocomplete>
  </el-col>
  <el-col :span="12">
    <div class="sub-title">Liste des suggestions à l'écriture</div>
    <el-autocomplete
      class="inline-input"
      v-model="state2"
      :fetch-suggestions="querySearch"
      placeholder="Entrez quelque chose"
      :trigger-on-focus="false"
      @select="handleSelect"
    ></el-autocomplete>
  </el-col>
</el-row>
<script>
import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
  setup() {
    const links = ref([]);
    const querySearch = (queryString, cb) => {
      var results = queryString
        ? links.value.filter(createFilter(queryString))
        : links.value;
        // call callback function to return suggestions
        cb(results);
    };
    const createFilter = (queryString) => {
      return (restaurant) => {
        return (
          restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
          0
        );
      };
    };
    const loadAll = () => {
      return [
        { "value": "vue", "link": "https://github.com/vuejs/vue" },
        { "value": "element", "link": "https://github.com/ElemeFE/element" },
        { "value": "cooking", "link": "https://github.com/ElemeFE/cooking" },
        { "value": "mint-ui", "link": "https://github.com/ElemeFE/mint-ui" },
        { "value": "vuex", "link": "https://github.com/vuejs/vuex" },
        { "value": "vue-router", "link": "https://github.com/vuejs/vue-router" },
        { "value": "babel", "link": "https://github.com/babel/babel" }
        ];
    };
    const handleSelect = (item) => {
      console.log(item);
    };
    onMounted(() => {
      links.value = loadAll();
    });
    return {
      links,
      state1: ref(''),
      state2: ref(''),
      querySearch,
      createFilter,
      loadAll,
      handleSelect,
    };
  },
});
</script>

:::

Template personnalisé

Vous pouvez personnaliser la manière dont les suggestions sont affichées.

:::demo Utilisez scoped slot pour personnaliser les différentes suggestions. Dans le scope, vous pouvez accéder à l'objet suggestion via la clé item.

<el-autocomplete
  popper-class="my-autocomplete"
  v-model="state"
  :fetch-suggestions="querySearch"
  placeholder="Entrez quelque chose"
  @select="handleSelect">
  <template #suffix>
    <i class="el-icon-edit el-input__icon" @click="handleIconClick"></i>
  </template>
  <template #default="{ item }">
    <div class="value">{{ item.value }}</div>
    <span class="link">{{ item.link }}</span>
  </template>
</el-autocomplete>

<style>
.my-autocomplete li {
  line-height: normal;
  padding: 7px;
}
.my-autocomplete li .name {
  text-overflow: ellipsis;
  overflow: hidden;
}
.my-autocomplete li .addr {
  font-size: 12px;
  color: #b4b4b4;
}
.my-autocomplete li .highlighted .addr {
  color: #ddd;
}
</style>

<script>
import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
  setup() {
    const links = ref([]);
    const querySearch = (queryString, cb) => {
      var results = queryString
        ? links.value.filter(createFilter(queryString))
        : links.value;
      // call callback function to return suggestion objects
      cb(results);
    };
    const createFilter = (queryString) => {
      return (restaurant) => {
        return (
          restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
          0
        );
      };
    };
    const loadAll = () => {
      return [
        { "value": "vue", "link": "https://github.com/vuejs/vue" },
        { "value": "element", "link": "https://github.com/ElemeFE/element" },
        { "value": "cooking", "link": "https://github.com/ElemeFE/cooking" },
        { "value": "mint-ui", "link": "https://github.com/ElemeFE/mint-ui" },
        { "value": "vuex", "link": "https://github.com/vuejs/vuex" },
        { "value": "vue-router", "link": "https://github.com/vuejs/vue-router" },
        { "value": "babel", "link": "https://github.com/babel/babel" }
        ];
    };
    const handleSelect = (item) => {
      console.log(item);
    };

    const handleIconClick = (ev) => {
      console.log(ev);
    };

    onMounted(() => {
      links.value = loadAll();
    });

    return {
      links,
      state: ref(''),
      querySearch,
      createFilter,
      loadAll,
      handleSelect,
      handleIconClick,
    };
  },
});
</script>

:::

Recherche distante

Vous pouvez aller chercher des infos de suggestions sur un serveur distant.

:::demo

<el-autocomplete
  v-model="state"
  :fetch-suggestions="querySearchAsync"
  placeholder="Entrez quelque chose"
  @select="handleSelect"
></el-autocomplete>

<script>
import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
  setup() {
    const links = ref([]);
    const loadAll = () => {
      return [
        { "value": "vue", "link": "https://github.com/vuejs/vue" },
        { "value": "element", "link": "https://github.com/ElemeFE/element" },
        { "value": "cooking", "link": "https://github.com/ElemeFE/cooking" },
        { "value": "mint-ui", "link": "https://github.com/ElemeFE/mint-ui" },
        { "value": "vuex", "link": "https://github.com/vuejs/vuex" },
        { "value": "vue-router", "link": "https://github.com/vuejs/vue-router" },
        { "value": "babel", "link": "https://github.com/babel/babel" }
        ];
    };
    let timeout;
    const querySearchAsync = (queryString, cb) => {
      var results = queryString
        ? links.value.filter(createFilter(queryString))
        : links.value;

      clearTimeout(timeout);
      timeout = setTimeout(() => {
        cb(results);
      }, 3000 * Math.random());
    };
    const createFilter = (queryString) => {
      return (restaurant) => {
        return (
          restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
          0
        );
      };
    };
    const handleSelect = (item) => {
      console.log(item);
    };
    onMounted(() => {
      links.value = loadAll();
    });
    return {
      links,
      state: ref(''),
      querySearchAsync,
      createFilter,
      loadAll,
      handleSelect,
    };
  },
});
</script>

:::

Taille limite

:::demo maxlength et minlength sont des attributs natifs, indiquant la taille limite de l'input. Le nombre de caractères est mesuré par la taille de la chaine Javascript. Si vous utilisez maxlength, vous pourrez montrer le nombre de caractères en mettant show-word-limit à true.

<el-input
  type="text"
  placeholder="Please input"
  v-model="text"
  maxlength="10"
  show-word-limit
>
</el-input>
<div style="margin: 20px 0;"></div>
<el-input
  type="textarea"
  placeholder="Please input"
  v-model="textarea"
  maxlength="30"
  show-word-limit
>
</el-input>

<script>
import { defineComponent, ref } from 'vue'
export default defineComponent ({
  setup() {
    return {
      text: ref(''),
      textarea: ref('')
    }
  }
})
</script>

:::

Attributs de l'Input

Attribut Description Type Valeurs acceptées Défaut
type Type de l'input. string text, textarea et autres types d'input natifs text
modelValue / v-model Variable liée. string / number
maxlength Identique à maxlength dans l'input natif. number
minlength Identique à minlength dans l'input natif. number
show-word-limit Affiche le nombre de caractères restant ne marche que lorsque type est 'text' ou 'textarea'. boolean false
placeholder Placeholder de l' Input. string
clearable Si le bouton de reset apparaît. boolean false
show-password Si le champ doit un champ de mot de passe avec bouton de visualisation. boolean false
disabled Si le champ est désactivé. boolean false
size Taille du champ, marche quand type n'est pas 'textarea'. string medium / small / mini
prefix-icon Classe de l'icône de préfixe. string
suffix-icon Classe de l'iĉone de suffixe. string
rows Nombre de ligne pour une zone de texte, ne marche que si type est 'textarea'. number 2
autosize Si la zone de texte à une hauteur adaptative, ne marche que si type est 'textarea'. Peut accepter un objet, e.g. { minRows: 2, maxRows: 6 } boolean / object false
autocomplete Identique à autocomplete dans l'input natif. string on / off off
name Identique à name dans l'input natif. string
readonly Identique à readonly dans l'input natif. boolean false
max Identique à max dans l'input natif.
min Identique à min dans l'input natif.
step Identique à step dans l'input natif.
resize Contrôle les changements de taille autorisés. string none, both, horizontal, vertical
autofocus Identique à autofocus dans l'input natif. boolean false
form Identique à form dans l'input natif. string
label Texte du label. string
tabindex tabindex de l'input. string - -
validate-event Si la validation doit avoir lieu. boolean - true

Slots de l'Input

Nom Description
prefix Contenu du préfixe, ne marche que si type est 'text'.
suffix Contenu du suffixe, ne marche que si type est 'text'.
prepend Contenu à ajouter avant l'Input, ne marche que si type est 'text'.
append Contenu à ajouter après l'Input, ne marche que si type est 'text'.

Évènements

Nom Description Paramètres
blur Se déclenche quand Input perds le focus. (event: Event)
focus Se déclenche quand Input a le focus. (event: Event)
change Se déclenche quand la valeur change. (value: string \ number)
change Déclenché uniquement lorsque la zone de saisie perd le focus ou que l'utilisateur appuie sur Entrée. (value: string | number)
input Déclenché lorsque la valeur d'entrée change. (value: string | number)
clear Se déclenche quand le champ est effacé par le bouton de reset.

Méthodes de l'Input

Méthode Description Paramètres
focus Met le focus sur le champ.
blur Retire le focus de le champ.
select Sélectionne le texte du champ.

Attributs de l'autocomplétion

Attribut Description Type Options Défaut
placeholder Le placeholder de l'autocomplétion. string
clearable Si un bouton d'effacement doit apparaître. boolean false
disabled Si l'autocomplétion est déactivée. boolean false
value-key Nom de la clé de l'objet suggestion pour l'affichage. string value
icon Nom de l'icône. string
value Variable liée. string
debounce Délai d'attente après écriture, en millisecondes. number 300
placement Emplacement du menu popup. string top / top-start / top-end / bottom / bottom-start / bottom-end bottom-start
fetch-suggestions La méthode pour rechercher les suggestions. Lorsqu'elles sont prêtes, appelle callback(data:[]) pour les renvoyer à l'autocomplétion. Function(queryString, callback)
popper-class Nom de classe pour le menu de l'autocomplétion. string
trigger-on-focus Si les suggestions doivent apparaître quand l'input a le focus. boolean true
name Identique à name dans l'input natif. string
select-when-unmatched Si un évènement select doit être émis après pression sur entrée quand il n'y a pas de résultats. boolean false
label Texte du label. string
prefix-icon Classe de l'icône de préfixe. string
suffix-icon Classe de l'iĉone de suffixe. string
hide-loading Si l'icône de chargement doit être cachée dans le cas d'une recherche distante. boolean false
popper-append-to-body Si le menu doit être ajouter au body. Si le positionnement du menu est incorrect, essayez de mettre cette propriété à false. boolean - false
highlight-first-item Si la première suggestion de la liste issue de la recherche distante doit être en surbrillance par défaut. boolean false

Slots de l'autocomplétion

Nom Description
prefix Contenu du préfixe.
suffix Contenu du suffixe.
prepend Contenu à ajouter avant le champ.
append Contenu à ajouter après le champ.

Template personnalisé pour l'autocomplétion

Nom Description
Contenu personnalisé pour les suggestions. Le paramètre de scope est { item }.

Évènements de l'autocomplétion

Nom Description Paramètres
select Se déclenche quand une suggestion est cliquée. La suggestion sélectionnée.
change Se déclenche quand la valeur change. (value: string \ number)

Méthodes de l'autocomplétion

Méthode Description Paramètres
focus Met le focus sur l'élément.