繁体   English   中英

在模板内的 vuejs 组件中导入和使用类

[英]Import and use class in vuejs component inside template

我正在使用 vuejs/laravel 表单来更新用户设置。 经过一番挣扎,我不在验证处理中。 我正在使用 laravel 返回验证在输入字段下方添加错误消息以查找错误。 它的返回方式要求我以某种方式处理我“得到”错误的方式。

我的问题是我似乎无法找到如何在我的组件中导入一个类并从模板中使用它。 正如您在 EditUser.vue 中看到的,我试图通过导入的类作为v-text="errors.get('name')"获取错误

因此,任何人都可以帮助我如何改变我对此的方法或使我正在从事的工作正常工作。

edit.blade.php:

<edit-user-form user-array="{{ $user }}" 
route="{{ route('user.update', $user) }}"></edit-user-form>

编辑用户.vue:

<template>
  <form method="POST" action="update" @submit.prevent="onSubmit">
     <input id="name" type="text" name="name" v-model="user.name">
       <span class="invalid-feedback" role="alert">
         <strong v-text="errors.get('name')"></strong>
     </span>
  </form>
</template>

<script>
import {Errors} from '../errors.js';
export default {
    props: ['userArray', 'route'],
    data() {
        return {
            user: JSON.parse(this.userArray)
        }
    },
    methods: {
        onSubmit() {
            axios.post(this.route, this.user)
                .then(response => alert('Success'))
                .catch(error => Errors.record(error.response.data));
        }
    }
};
</script>

错误.js:

export class Errors {
    constructor() {
        this.errors = {};
    }

    get(field) {
        if (this.erros[field]) {
            return this.errors[field][0];
        }
    }
    record(errors) {
        this.errors = errors;
    }
}

单个文件组件的template标签中使用的所有变量,当被 Vue 解释时,基本上都是以this为前缀的。 因此,为了使某些变量可访问,我们必须将它们附加到当前组件的实例。

大多数情况下的简单解决方案,特别是,如果它是本地/很少使用的变量,则将Errors类分配给组件的data选项:

data () {
   return {
      user: JSON.parse(this.userArray),
      errors: new Errors()
   }
},
methods: {
    onSubmit() {
        axios.post(this.route, this.user)
            .then(response => alert('Success'))
            .catch(error => this.errors.record(error.response.data));
    }
}

我在那里放置了new关键字,因为如果每个组件都将使用它自己的Errors类实例,那么这个实现是有意义的。

如果目标是在应用程序中共享Errors类并访问错误包,则可以将其添加到Vue.prototype并从任何组件通过this访问。 是帮助创建自定义插件的众多文章之一。

根据当前实现试图实现的目标,可能有更好的选择,例如mixin或可重用的错误/警报组件,可以处理错误响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM