【问题标题】:Render form after method completion in VueJS在 VueJS 中方法完成后渲染表单
【发布时间】:2017-12-21 02:33:40
【问题描述】:

我的 VueJS 页面出现问题。这是一个用于网站不同翻译的页面。它在顶部有一个用于语言选择的下拉菜单,一旦切换将使用当前语言更新字段。

加载时问题就开始了,因为我的表单是这样的:

<form id="trForm">
    ...
    <input type="text" name="header_title" class="form-control" v-model="translations.header.header_title" />
    ...
</form>

它试图在方法返回任何数据之前访问这些属性,但是一旦完成它仍然会显示数据,但是当我尝试切换语言时变得很麻烦,它不会因为这个问题和另外,如果我执行以下操作:

<form id="trForm">
    ...
    <input type="text" name="header_title" v-if="translations.header" class="form-control" v-model="translations.header.header_title" />
    ...
</form>

在每个字段上,未填充的字段将根本不显示新输入值的字段。我尝试了类似translations.features || '' 的方法,但没有成功。

我还尝试在父块上设置一个条件,如果加载为假将显示表单,但由于页面先加载而不是方法执行,因此第一微秒始终为假。

methods: {
    fetchTranslations(e) {
        let vm = this;
        vm.loaded = false;
        $.get('/ajax/admin/translations', { 'locale': e }).done((data) => {
            if (data.success) {
                vm.translations = JSON.parse(data.translations.translation);
                vm.loaded = true;
            } else {
                toastr.error('Something went wrong');
            }
        });
    },

请问,我该怎么办?有数据后显示表格就好了。

【问题讨论】:

  • I18n 很难。我强烈推荐kazupon.github.io/vue-i18n/en
  • 我不想用 VueJS 来做。我只是想在有数据显示后显示表格。
  • 我的错,完全误解了这个问题。

标签: vue.js


【解决方案1】:
  • 引入一个新变量,例如loaded 默认为 false
  • 将此变量用作v-if 条件form
  • 在数据获取的回调中,将loaded 设置为true

【讨论】:

  • 差不多。第一次加载有效,但是当我切换语言时,它会显示相同的错误。切换语言时,运行相同的方法,传递一个参数。
  • 无论何时更改语言,您都可以将loaded 设置为false,并在加载完成后设置回true - 例如通过watchtranslations
  • 你能写一个例子吗?我将使用 VueJS 方法更新问题。
  • 我通常会很高兴,但它已经过了我的就寝时间了。这是一个帮助您入门的链接:vuejs.org/v2/guide/computed.html#Computed-vs-Watched-Property - 您本质上想要watch translations 并在回调中将this.loaded 设置为false
  • 快速更正:您想查看触发您获取翻译的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多