在 Laravel Nova Vue 组件中观看动态渲染的字段

Posted

技术标签:

【中文标题】在 Laravel Nova Vue 组件中观看动态渲染的字段【英文标题】:Watching a dynamically rendered field in Laravel Nova Vue component 【发布时间】:2020-04-19 12:56:01 【问题描述】:

在 Laravel Nova 中,动作模式在 Vue 中通过检索要通过动态组件显示的字段列表来呈现。我已经用自己的自定义组件替换了动作模式,但是在没有扩展整个组件集来呈现表单字段的情况下,我正在努力实现我想要的效果。

我有我的CustomResourceIndex.vue,包含有条件加载(通过v-ifActionModal.vue,其中的表单字段呈现如下:

    <div class="action" v-for="field in action.fields" :key="field.attribute">
        <component
            :is="'form-' + field.component"
            :resource-name="resourceName"
            :field="field"
        />
    </div>

根据field.component 值选择实际的表单字段组件。

那些表单域(理想情况下我不想扩展和编辑)呈现如下:

    <template>
      <default-field :field="field" :errors="errors">
        <template slot="field">
          <input
        class="w-full form-control form-input form-input-bordered"
        :id="field.attribute"
        :dusk="field.attribute"
        v-model="value"
        v-bind="extraAttributes"
        :disabled="isReadonly"
          />
        </template>
      </default-field>
    </template>

我想观察特定字段的值并在它们发生变化时运行方法。不幸的是,由于输入元素上缺少 ref 属性或无法访问表单元素所绑定的值,我不确定如何在 ActionModal.vue 中实现这一点。

我希望因为我仍然可以访问 id,所以我有一些潜在的方法可以模仿这种行为。

我自己找到的许多资源都告诉我,任何带有 ID 的东西都可以通过this.$refs 访问,但这似乎不是真的。我只能在this.$refs 中看到具有显式声明ref 属性的元素,所以我不确定我是否误解了那里的某些内容。

【问题讨论】:

【参考方案1】:

那些组件会触发事件吗?尝试查看 Vue DevTools 的事件选项卡,以查看在更新值时是否从 default-field 组件触发了某些事件。

我的猜测是你可以这样写:

<div class="action" v-for="field in action.fields" :key="field.attribute">
    <component
        :is="'form-' + field.component"
        :resource-name="resourceName"
        :field="field"
        @input="doSomething($event)"
    />
</div>

$event 值是该字段的新值。

如果您对默认表单域的行为有更多信息,请在 cmets 上联系我(是否可以在某处访问它们的完整代码?)。

【讨论】:

【参考方案2】:

我建议您查看VueJS watch property。 您可以收听函数调用、值更改等。

watch: 
  'field.component': function(newVal, oldVal) 
    console.log('value changed from ' + oldVal + ' to ' + newVal);
  ,
,

【讨论】:

以上是关于在 Laravel Nova Vue 组件中观看动态渲染的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel nova 中创建可重用的 vue 组件?

从 Laravel 中的 .env 获取 .data 到 Laravel Nova Card - vue 组件

Laravel Nova自定义工具创建:vue组件不刷新

Laravel Nova 覆盖 vue 组件导致 [Vue 警告]:编译模板时出错

Laravel Nova 自定义字段获取模型值

如何将 Vuex 添加到我的 Laravel Nova 工具中?