Компонент NInput с типом
"password" является базовым инструментом для ввода пароля в
приложениях на Vue.js с использованием библиотеки Naive UI. Он
поддерживает все стандартные свойства текстового ввода и дополнительно
предоставляет возможности для управления видимостью пароля, валидацией и
стилями.
Для создания поля ввода пароля достаточно указать тип
password в компоненте NInput:
<template>
<n-input type="password" v-model="password" placeholder="Введите пароль" />
</template>
<script setup>
import { ref } from 'vue'
const password = ref('')
</script>
Ключевые моменты:
v-model связывает значение поля с переменной
password.placeholder позволяет добавить подсказку для
пользователя.password скрывает введённые символы стандартным
способом (точками или звёздочками).Naive UI позволяет добавлять кнопку показа/скрытия
пароля с помощью свойства show-password:
<n-input
type="password"
v-model="password"
placeholder="Введите пароль"
show-password
/>
Особенности поведения:
show-password пользователь может
переключать видимость символов.Валидация пароля может быть реализована через комбинацию событий и реактивных переменных. Например, для проверки длины и наличия специальных символов:
<template>
<n-input
type="password"
v-model="password"
placeholder="Введите пароль"
@blur="validatePassword"
:status="status"
:feedback="feedback"
/>
</template>
<script setup>
import { ref } from 'vue'
const password = ref('')
const status = ref('') // '' | 'error' | 'success'
const feedback = ref('')
function validatePassword() {
if (password.value.length < 8) {
status.value = 'error'
feedback.value = 'Пароль должен быть не менее 8 символов'
} else if (!/[!@#$%^&*]/.test(password.value)) {
status.value = 'error'
feedback.value = 'Пароль должен содержать хотя бы один специальный символ'
} else {
status.value = 'success'
feedback.value = ''
}
}
</script>
Объяснение:
status изменяет цвет рамки (error
— красная, success — зелёная).feedback отображает сообщение под полем ввода.blur используется для проверки при потере
фокуса.Компонент NForm и NFormItem позволяют
структурировать форму с валидацией:
<template>
<n-form :model="formState" ref="formRef">
<n-form-item label="Пароль" path="password" :rules="rules.password">
<n-input type="password" v-model="formState.password" show-password />
</n-form-item>
</n-form>
</template>
<script setup>
import { ref } from 'vue'
const formRef = ref(null)
const formState = ref({ password: '' })
const rules = {
password: [
{ required: true, message: 'Пароль обязателен', trigger: 'blur' },
{
validator(rule, value) {
if (value.length < 8) return new Error('Пароль слишком короткий')
},
trigger: 'blur'
}
]
}
</script>
Особенности:
NFormItem принимает path, который
связывает поле с моделью.rules задаёт правила валидации для каждого
поля.required),
так и кастомные через validator.NInput поддерживает стандартные свойства для
кастомизации внешнего вида:
size:
"small" | "medium" | "large"
<n-input type="password" size="large" v-model="password" />bordered: true | false
— включение или отключение рамки.
<n-input type="password" bordered={false} v-model="password" />placeholder и
clearable — для подсказок и кнопки
очистки.
Пример с полной кастомизацией:
<n-input
type="password"
v-model="password"
size="medium"
placeholder="Пароль"
clearable
show-password
bordered
/>
NInput поддерживает слоты для добавления кастомных
иконок:
<n-input type="password" v-model="password">
<template #prefix>
<n-icon><LockOutlined /></n-icon>
</template>
<template #suffix>
<n-button @click="generatePassword">Сгенерировать</n-button>
</template>
</n-input>
Пояснения:
prefix — иконка или текст перед полем ввода.suffix — кнопка или иконка после поля, можно
использовать для генерации пароля или дополнительных действий.Для динамического управления состоянием поля можно использовать реактивные переменные:
<template>
<n-input
type="password"
v-model="password"
:disabled="isDisabled"
:readonly="isReadonly"
show-password
/>
<n-switch v-model="isDisabled" /> Отключить
<n-switch v-model="isReadonly" /> Только чтение
</template>
<script setup>
import { ref } from 'vue'
const password = ref('')
const isDisabled = ref(false)
const isReadonly = ref(false)
</script>
Этот функционал делает компонент Password Input гибким
инструментом для создания защищённых и удобных форм ввода пароля с
полной поддержкой реактивности, валидации и кастомизации в экосистеме
Naive UI.