반응형
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
) 롤업을 사용합니다.
- 임시 폴더를 만들고 폴더로 전환한 후 노드 프로젝트를 시작합니다.
mkdir test && cd test && npm init --yes
주의: Windows 명령어프롬프트 또는 powershell 치환으로 실행할 경우 &&
와 함께;
(또는 각 명령어를 개별적으로 실행합니다).
- 만들다
index.js
:
import { useVuelidate } from '@vuelidate/core';
window.useVuelidate = useVuelidate;
- 내보내기에 필요한 패키지 추가:
npm i rollup @rollup/plugin-node-resolve @vuelidate/core vue-demi
rollup
파일을 번들합니다.- 노드 스위칭 롤업 플러그인이 종속성을 해결하고 번들에 포함합니다.
vue-demi
는 입니다.@vuelidate/core
의존.
결국.vue-demi
가지다vue
의존관계로 간주됩니다만, 설정을 통해서 롤업을 통지합니다.vue
는 글로벌 범위에서 이미 사용 가능하므로 번들에 포함되지 않아야 합니다.
- 만들다
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()]
}
- 파일 번들:
./node_modules/.bin/rollup --config rollup.config.js
- 모든 것이 잘 되었다면, 당신은 이제 한 잔 더 마셔야 합니다.
vuelidate.iife.js
파일을 같은 폴더에 저장합니다. - 파일을 브라우저에 로드합니다(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
반응형
'programing' 카테고리의 다른 글
vue js cli에 Axios가 정의되어 있지 않습니다. (0) | 2022.08.30 |
---|---|
자바 문자열은 정말 불변일까요? (0) | 2022.08.30 |
페이로드에 전달된 Vuex 어레이 변환 (0) | 2022.08.30 |
VueJ에 컴포넌트를 재장착하는 방법 (0) | 2022.08.30 |
Vue.js - v-for 내에서 필터 사용 (0) | 2022.08.30 |