如何为Phoenix simple_form的.input字段设置默认值?
解决Phoenix 1.7.6中Simple Form设置默认值的问题
问题原因
直接在.input组件里写value属性不会生效,因为Phoenix的表单字段值由@form结构体中的数据决定,组件会优先使用@form里的值覆盖手动设置的value。
正确设置方式
方式1:初始化表单时传入默认值
在LiveView的mount或handle_params方法中,创建@form时附带默认数据:
def mount(_params, _session, socket) do # 注意date格式要符合HTML要求:YYYY-MM-DD default_data = %{date: "1982-05-01"} form = to_form(default_data) {:ok, assign(socket, form: form)} end
方式2:基于Ecto Schema的表单设置默认值
如果表单绑定Ecto Schema,在changeset中设置默认值:
def changeset(weight, attrs \\ %{}) do weight |> cast(attrs, [:weight, :date]) |> validate_required([:weight, :date]) # 当attrs无date值时,使用默认值 |> put_change(:date, Map.get(attrs, :date, "1982-05-01")) end
完成上述设置后,模板中无需保留value属性,保持原有写法即可:
<.input field={@form[:date]} type="date" label="Date" step="any" />
额外提示
HTML的date输入类型要求值必须是YYYY-MM-DD格式,你之前写的01.05.1982不符合规范,即使生效也无法被正确识别。
内容的提问来源于stack exchange,提问作者martins
相关产品推荐
相关产品推荐

