gpt4 book ai didi

javascript - vue 属性 "$v"中的 vuelidate 在渲染期间被访问但未在实例上定义

转载 作者:行者123 更新时间:2023-12-05 05:49:41 25 4
gpt4 key购买 nike

我正在构建一个包含 html 文件中的表单的 vue 组件。需要使用 vuelidate 库验证表单。

显示以下警告且验证无效。

[Vue warn]: Property "$v" was accessed during render but is notdefined on instance. at

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 不工作。我有一个特定的用例,我们想在 html 项目中集成 vuejs。Vue 似乎是一个合适的选择。

最佳答案

Vuelidate 似乎没有 iife 导出。这意味着(afaict)它不能在浏览器中使用,来自 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 打包您的文件,
  • node-resolve rollup 插件解析依赖关系并将它们包含在包中
  • vue-demi 是一个 @vuelidate/core 依赖。
    反过来,vue-demivue 作为依赖,但我们会通过配置让 rollup 知道 vue 已经在全局范围内可用,所以它不应该包含在 bundle 中。
  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 之后在浏览器中加载文件(它希望 VueglobalThis 中定义 - 又名:window)。

查看它的工作情况:https://codesandbox.io/s/modest-mirzakhani-tq46j?file=/index.html

关于javascript - vue 属性 "$v"中的 vuelidate 在渲染期间被访问但未在实例上定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70633687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com