для ввода 16-ричного числа с number'ом на выходе. типа:
<script lang="ts">
export let num: number
let hex: string
$: hex = num.toString(16)
$: num = parseInt(hex, 16)
</script>
<input bind:value={hex} />
но тут на циклическую зависимость ругаются аж два линтера.
или такое вообще сделать нельзя, и надо вешаться на on:change?
<script lang="ts"> export let num: number $: hex = parseInt(num.toString(16), 16) </script> <input bind:value={hex} /> Не устроит ли такой вариант?
не, так в инпуте ж будет десятичное число
Всё, понял, нужно же в 16 систему...)
Можно сделать это экшнами
Обычно в таких кейсах помогает дополнительная проверка в $:
проверка на равенство между num и hex (с конвертацией) перед каждым присваиванием? всё равно ругается на циклическую зависимость, ещё на этапе сборки
Очень хорошая идея сделать это экшеном, как подсказал Марк, советую попробовать.
посмотрел внимательнее, тут все еще проще: https://svelte.dev/repl/5cc79bd74b3e48a28a34a80914bfd01f?version=3.37.0
Такой вопрос. С чем связано то, что когда мы удаляем десятичное число внутри input связь пропадает и далее если мы пишем уже другое число HEX не меняется.
так тут хексовый инпут не редактируется. наверно потмоу что при изменении hex выполняется весь блок $:, а там первая строка hex = num?.toString(16); затирает только что изменившееся значение
ой, да. невнимательно смотрю. тогда нужно будет еще проверки впилить и кажется вариант с ивентом, который выше предложили будет более лаконичным. можно только on:change заменить на on:input и в контексте текстового поля разницы с биндингом не будет
Обсуждают сегодня