Skip to content

Работа со значениями

На данной странице представлены все методы и свойства, которые вам пригодятся для работы с состоянием формы.

Установка значения

Основной задачей форм является поддержания текущего состояния(значения). Для изменения его используется метод setValues:

ts
form.setValues({
    name: "Jack",
    age: 24
})
form.values // { name: "Jack", age: 24 }
form.setValues({
    name: "Jack",
    age: 24
})
form.values // { name: "Jack", age: 24 }

Параметры

values Обязательный

Значения, когда будут установлены для формы.

options Необязательный

Необязательный параметр, объект со следующими свойствами:

_

changed Необязательный

Boolean значение, являются ли данные значения изменениями. Если true, то значения будут проецироваться на changes.

target Необязательный

Имя целевого объекта для которого был вызван setValues. На данное свойство можно смотреть так, будто метод был вызван из дочернего элемента, имя которого было передано в target.

clean Необязательный

Нужно ли полностью перезаписывать предыдущее значение. По умолчанию setValues примешивает значение, но если установлен clean: true, предыдущее значение будет полностью перезаписано новым.

Примеры использования

Установка значения

ts
form.setValues({
    username: "Jack"
})
form.values // { username: "Jack" }
form.setValues({
    username: "Jack"
})
form.values // { username: "Jack" }

Установка значения с параметром target

ts
form.setValues({
    city: "Emerald City"
}, { target: "address" })
form.values // { address: { city: "Emerald City" } }
form.setValues({
    city: "Emerald City"
}, { target: "address" })
form.values // { address: { city: "Emerald City" } }

Использование clean параметра

ts
// Values: { username: "Jenesius", age: 24 }
form.setValues({ username: "Jenesius", age: 24 }) 

form.setValues({ 
    name: "Jask"
}, { clean: true })
form.values  // { name: "Jack" }
// Values: { username: "Jenesius", age: 24 }
form.setValues({ username: "Jenesius", age: 24 }) 

form.setValues({ 
    name: "Jask"
}, { clean: true })
form.values  // { name: "Jack" }

Использования target и clean вместе

ts
form.setValues({
    name: "Jack",
    address: {
		city: "Emerald City"
    }
})

form.setValues({
    code: "00"
}, { target: "address", clean: true })
form.values // { name: "Jack", address: { code: "00" } }
form.setValues({
    name: "Jack",
    address: {
		city: "Emerald City"
    }
})

form.setValues({
    code: "00"
}, { target: "address", clean: true })
form.values // { name: "Jack", address: { code: "00" } }

Примешивание значения

ts
form.setValues({
    address: {
		city: "Emerald City"
    }
})
// { address: { city: "Emerald City" } }

form.setValues({
	address: {
		code: "00"
	}
})
form.values // { address: { city: "Emerald City", code: "00" } }
form.setValues({
    address: {
		city: "Emerald City"
    }
})
// { address: { city: "Emerald City" } }

form.setValues({
	address: {
		code: "00"
	}
})
form.values // { address: { city: "Emerald City", code: "00" } }

Изменение значений

Как уже понятно из setValues, если мы передаем change: true, то происходит работа именно с changes состоянием формы. Для удобной работы был создан alias change, которые автоматически устанавливает параметр changed.

ts
form.change(data) // form.setValues(data, { changed: true })
form.change(data) // form.setValues(data, { changed: true })

Отмена изменений

Чтобы отменить изменения(работа с changes) используется метод revert:

ts
form.setValues({username: "Jenesius", age: 24});
form.change({age: 23, father: true});
// Values: { username: "Jenesius", age: 23, father: true }

form.revert();
// Values: { username: "Jenesius", age: 24}
form.setValues({username: "Jenesius", age: 24});
form.change({age: 23, father: true});
// Values: { username: "Jenesius", age: 23, father: true }

form.revert();
// Values: { username: "Jenesius", age: 24}

Очистка значений

Чтобы полностью очистить форму используется метод cleanValues:

ts
form.setValues({name: "Jack"})
form.cleanValues(); // Values: {}
form.setValues({name: "Jack"})
form.cleanValues(); // Values: {}

Данный метод также принимает значения, которые будут установлены вместо текущего:

ts
form.setValues({name: "Jack"})
form.cleanValues({age: 24}); // Values: { age: 24 }
form.setValues({name: "Jack"})
form.cleanValues({age: 24}); // Values: { age: 24 }

Значения формы (Values)

Из предыдущих примеров видно, что конечное значение формы находится в form.values:

ts
form.setValues({age: 24});
form.values // { age: 24 }
form.setValues({age: 24});
form.values // { age: 24 }

Изменения формы (Changes)

Чтобы получить только изменения, необходимо воспользоваться form.changes:

ts
form.setValues({ name: "Jack" })
form.change({ age: 24 })
form.values; // { name: "Jack", name: 24 }
form.changes; // { age: 24 }
form.setValues({ name: "Jack" })
form.change({ age: 24 })
form.values; // { name: "Jack", name: 24 }
form.changes; // { age: 24 }

Получение значения по имени

В некоторых ситуациях есть надобность получения значения поля по имени. Для такого случая необходимо использовать именно метод getValueByName.

Параметры

name Необязательный

Строковое название поля, для которого необходимо получить значение.

ts
form.setValues({ login: "Jack" });
form.getValueByName('login') // Jack
form.setValues({ login: "Jack" });
form.getValueByName('login') // Jack

WARNING

Получение значения по имени свойства является ошибочным:

ts
form.values['login'] // Wrong
form.getValueByName('login') // Correct
form.values['login'] // Wrong
form.getValueByName('login') // Correct

Если мы говорим про простые поля - это будет работать, однако в случае с составными полями (address.country) данный способ не сможет найти нужное значение поля.

Подтверждение изменений

Для того чтобы подтвердить все изменения или только для конкретного поля, воспользуйтесь методом acceptChanges. Метод очищает changes (целиком или единичное поле) и устанавливает очищенное значение в values.

Параметра

name Необязательное

Если не передано - все изменения будет сперва проецированы на values, а затем очищены. Если значение передаётся оно должно быть строковым названием поля.

Пример

ts
const form = new Form();
form.change({ username: "Jack", age: 24, id: 1 })

form.acceptChanges('username');
form.pureValues; // { username: "Jack" }
form.changes ; // { age: 24, id: 1 }

form.acceptChanges();
form.pureValues; // { username: "Jack", age: 24, id: 1 }
form.changes; // {}
const form = new Form();
form.change({ username: "Jack", age: 24, id: 1 })

form.acceptChanges('username');
form.pureValues; // { username: "Jack" }
form.changes ; // { age: 24, id: 1 }

form.acceptChanges();
form.pureValues; // { username: "Jack", age: 24, id: 1 }
form.changes; // {}

События

Использование данного метода не порождает события изменения. Это важно учитывать при его использовании.

Очистка изменений для поля

Метод cleanChangesByField отменяет изменения для переданного поля. Данная функция работает только с объектом changes и не затрагивает объект values. Если в дочернее свойство объекта changes является объектом, но при этом количество дочерних ключей равно 0, данной свойство полностью удаляется из объекта changes.

ts
form.setValues({age: 24})
form.change({name: "Jack", age: 25}); // { name: "Jack", age: 25 }
form.cleanChangesByField('name');
// Changes: { age: 25 }
// Values: { age: 25 }
form.setValues({age: 24})
form.change({name: "Jack", age: 25}); // { name: "Jack", age: 25 }
form.cleanChangesByField('name');
// Changes: { age: 25 }
// Values: { age: 25 }

Проверка поля на изменение

Метод checkFieldChange проверяет изменения для переданного названия поля. В случае, если поле было изменено вернёт true, false в противном случае.

ts
form.change({name: "Jack"});
form.checkFieldChange('name') // true
form.checkFieldChange('age')  // false
form.change({name: "Jack"});
form.checkFieldChange('name') // true
form.checkFieldChange('age')  // false

Статус формы (Changed)

Чтобы понять, что форма находится в изменённом состоянии необходимо получить значение свойства changed;

ts
form.changed // false
form.change({ name: "Jack" })
form.changed // true
form.revert();
form.changed // false
form.changed // false
form.change({ name: "Jack" })
form.changed // true
form.revert();
form.changed // false

Released under the MIT License.