美文网首页从零到一
typescript nuxtjs 中使用 vee-valid

typescript nuxtjs 中使用 vee-valid

作者: 思考蛙 | 来源:发表于2020-03-05 18:23 被阅读0次

    1 创建 plugins/veeValidate.ts

    import Vue from 'vue';
    import {
      ValidationProvider, configure, localize, extend,
    } from 'vee-validate';
    import zh from 'vee-validate/dist/locale/zh_CN.json';
    import {
      required, max, email,
    } from 'vee-validate/dist/rules';
    
    Vue.component('ValidationProvider', ValidationProvider);
    
    // 一些需要的规则
    extend('required', { ...required });
    extend('max', { ...max });
    extend('email', { ...email });
    
    // 所有规则
    // import * as rules from 'vee-validate/dist/rules';
    // for (let rule in rules) {
    //   extend(rule, rules[rule]);
    // }
    
    localize('zh_CN', zh);
    
    

    2 添加插件到 nuxt.config.js

      plugins: [
        {src: '~/plugins/veeValidate.ts', ssr: true},
      ],
    

    3 引入规则到 Nuxt.js 中

    默认情况下Nuxt会忽略node_modules文件夹的转换,因为rules.js是一个ES6导出。所以需要将 vee-validate/dist/rules添加到将要转换的源列表中。否则,
    会报 "Unexpected Token: export" errors. 错误 。

    在你的nuxt.config.js中添加以下代码行:

    build: {
      // Add exception
      transpile: [
        "vee-validate/dist/rules"
      ],
      /*
        ** You can extend webpack config here
        */
      extend(config, ctx) {
        // ...
      }
    }
    

    3 模块中使用

    <template>
      <validation-provider
        ref="messageForm"
        v-slot="{ errors }"
        rules="required|max:400"
        name="必填内容"
      >
        <input
          v-model="message"
          type="text"
        />
        <span v-if="errors.length" v-for="(error, i) in errors" :key="`errors${i}`">
            {{ error }}
        </span>
      </validation-provider>
    </template>
    
    <script lang="ts">
      import {Component, Vue} from 'nuxt-property-decorator'
      import { ValidationProvider } from 'vee-validate';
      @Component({
        components: {
          ValidationProvider
        }
      })
      export default class VeeTest extends Vue {
      }
    </script>
    
    

    一些错误说明:

    Uncaught (in promise) Error: No such validator 'max' exists.
    

    由于 vee-validate3 默认是导入验证规则的,所以首先需要把要用到的规则导入。

    import zh from 'vee-validate/dist/locale/zh_CN.json'; 模块找不到错误
    

    检查 tsconfig.json 添加 "resolveJsonModule": true,

    相关文章

      网友评论

        本文标题:typescript nuxtjs 中使用 vee-valid

        本文链接:https://www.haomeiwen.com/subject/goaqrhtx.html