programing

vue 속성 "$v"의 vuelidate가 렌더링 중에 액세스되었지만 인스턴스에서 정의되지 않았습니다.

copyandpastes 2022. 8. 30. 23:21
반응형

vue 속성 "$v"의 vuelidate가 렌더링 중에 액세스되었지만 인스턴스에서 정의되지 않았습니다.

html 파일에 폼을 포함하는 vue 컴포넌트를 빌드하고 있습니다.vuelidate 라이브러리를 사용하여 폼을 검증해야 합니다.

다음 경고가 표시되며 검증이 작동하지 않습니다.

[Vue warn] :속성 "$v"는 렌더링 중에 액세스되었지만 인스턴스에서 정의되지 않았습니다.

const { required, minValue, minLength, email } = window.validators;
    const {Vuelidate} = window.vuelidate;
    const vue = {
        template:
        /*html*/
        `<div>
            <form >
                <p>
                    <input name="email" type="text" placeholder="Email" v-model="email" />
                    <span>{{$v}}</span>
                </p>
                <p>
                    <input name="password" v-model="password.password" type="password" placeholder="Password"/>
                    <span></span>
                </p>
                <p>
                    <input name="confirmPassword" v-model="password.confirm" type="password" placeholder="Confirm Password" />
                    <span></span>
                </p>
                <button @click="submitForm">Submit</button>
            </form>
        </div>
        `,
        data() {
            return {
                email: '',
                password: {
                    password: '',
                    confirm: '',
                },
            };
            
        },
        validations:  {
                email: { required },
                password: {
                    password: { required },
                    confirm: { required },
                }
        },
        mounted: function() { 
            
        },
        methods: {
            submitForm() {
                console.log(this.$v)
                alert("Form successfully submitted");
            },
        },
        };
    const app = Vue.createApp(vue);
    app.mount('#app');
    app.use(window.vuelidate.default);
input {
  border: 1px solid silver;
  border-radius: 4px;
  background: white;
  padding: 5px 10px;
}

.dirty {
  border-color: #5A5;
  background: #EFE;
}

.dirty:focus {
  outline-color: #8E8;
}

.error {
  border-color: red;
  background: #FDD;
}

.error:focus {
  outline-color: #F99;
}
<!DOCTYPE html>

<html>

<head>
   <title></title>

   <link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" >
</head>

<body>

<div class="container">

   <div class="row">

       <div id = "app">


       </div>

   </div>

</div>


<script src="https://unpkg.com/vue@next"></script>
<script src="https://cdn.jsdelivr.net/npm/vuelidate@0.7.7/dist/vuelidate.min.js" integrity="sha256-La6WkedSRP9RsZaBVOO1mwpob2EhzoiYSCxmAizHsYM=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/vuelidate@0.7.7/dist/validators.min.js" integrity="sha256-0IEcyUDILTKDOFvs84hM79AdpmIDFw1d99udusXv2vQ=" crossorigin="anonymous"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript">
    
</script>
</body>
</html>

Vue는 정상적으로 동작하고 있지만 Vuelidate는 동작하지 않습니다.vuej를 html 프로젝트에 통합하고 싶은 구체적인 사용 사례가 있습니다.Vue는 적절한 옵션인 것 같습니다.

Vuelidate는 그런 게 없는 것 같아요.iife수출.즉, cdn 링크의 브라우저에서는 사용할 수 없습니다.노드 앱에 의해 컴파일되어야 하며, 노드 앱은 종속성을 해결해야 합니다.


즉시 호출된 함수식으로 다시 내보내는 방법은 다음과 같습니다.iife) 롤업을 사용합니다.

  1. 임시 폴더를 만들고 폴더로 전환한 후 노드 프로젝트를 시작합니다.
mkdir test && cd test && npm init --yes

주의: Windows 명령어프롬프트 또는 powershell 치환으로 실행할 경우 &&와 함께;(또는 각 명령어를 개별적으로 실행합니다).

  1. 만들다index.js:
import { useVuelidate } from '@vuelidate/core';
window.useVuelidate = useVuelidate;
  1. 내보내기에 필요한 패키지 추가:
npm i rollup @rollup/plugin-node-resolve @vuelidate/core vue-demi
  • rollup파일을 번들합니다.
  • 노드 스위칭 롤업 플러그인이 종속성을 해결하고 번들에 포함합니다.
  • vue-demi는 입니다.@vuelidate/core의존.
    결국.vue-demi가지다vue의존관계로 간주됩니다만, 설정을 통해서 롤업을 통지합니다.vue는 글로벌 범위에서 이미 사용 가능하므로 번들에 포함되지 않아야 합니다.
  1. 만들다rollup.config.js:
import { nodeResolve } from '@rollup/plugin-node-resolve';

export default {
  input: './index.js',
  output: {
    format: 'iife',
    file: 'vuelidate.iife.js',
    globals: { vue: 'window.Vue' }
  },
  plugins: [nodeResolve()]
}
  1. 파일 번들:
./node_modules/.bin/rollup --config rollup.config.js
  1. 모든 것이 잘 되었다면, 당신은 이제 한 잔 더 마셔야 합니다.vuelidate.iife.js파일을 같은 폴더에 저장합니다.
  2. 파일을 브라우저에 로드합니다(Vue 이후).Vue정의되다globalThis- a.k.a:window).

보기: https://codesandbox.io/s/modest-mirzakhani-tq46j?file=/index.http:/https://codesandbox.io/s/modest-mirzakhani-tq46j?file

언급URL : https://stackoverflow.com/questions/70633687/vuelidate-in-vue-property-v-was-accessed-during-render-but-is-not-defined-on

반응형