当Form组件中的值发生变化时。该Editform不验证,它不设置IsModified的FieldState为true。只有在提交时才会验证。我看到当值改变时,类“修改”没有添加到 HTML 中的输入标签。所以看起来 EditContext 没有设置 FieldState?
我怎样才能做到这一点?
非常感谢!
代码(简体):
表单组件
@typeparam TItem
<EditForm EditContext="_editContext" OnValidSubmit="OnValidSumit">
<DataAnnotationsValidator />
<ValidationSummary />
@ChildContent
</EditForm>
@code {
[Parameter] public TItem Model { get; set; }
[Parameter] public EventCallback OnValidSumit { get; set; }
[Parameter] public RenderFragment ChildContent { get; set; }
private EditContext _editContext;
protected override void OnParametersSet()
{
_editContext = new EditContext(Model);
}
}
Run Code Online (Sandbox Code Playgroud)
PS 当我使用OnInitialized而不是OnParametersSet,我得到修改后的类。但是接下来有一个问题DataAnnotationsValidator。这就像它没有看到 EditContext 的值,并且在值更改时始终有效或无效(在第一次提交之后)。
protected override void …Run Code Online (Sandbox Code Playgroud) input我想选择焦点元素的文本。我尝试使用bind:this={ref}and then ref.select(),但这似乎只有当我bind:value从input元素中删除时才有效。为什么?以及如何解决?
非常感谢!
<script lang="ts">
import { evaluate } from 'mathjs';
export let value: string | number = 0;
let ref;
function handleFocus() {
value = value?.toString().replace('.', '').replace(',', '.');
ref.select();
}
function handleBlur() {
value = parseFloat(evaluate(value?.toString())).toLocaleString('be-NL', {
maximumFractionDigits: 2,
minimumFractionDigits: 2
});
}
</script>
<input
class="text-right"
autocomplete="off"
type="text"
bind:value
bind:this={ref}
on:focus={handleFocus}
on:blur={handleBlur}
/>
Run Code Online (Sandbox Code Playgroud) 在 my 中EditForm,我想防止用户通过按键提交表单Enter。
我尝试了以下方法,但没有奏效。
<button type="submit" @onkeypress:preventDefault>Save</button>
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我正在将 SvelteKit 与 Typescript 结合使用。在 $lib 文件夹中,我有一个 .ts 文件。
'$app/stores'我尝试从.ts 文件中访问用户/会话。
import { get } from 'svelte/store';
import { session } from "$app/stores";
function getUser(){
const {user} = get(session);
console.log(user);
}
Run Code Online (Sandbox Code Playgroud)
但是当调用该函数时,我在控制台中收到以下错误消息:
未捕获(承诺中)错误:在组件初始化之外调用函数
我该如何解决这个问题?
非常感谢!