sup*_*ize 11 vue.js vue-component vuejs2
我想访问另一个 props 验证器中的 props 值:
props: {
type: {
type: String,
default: "standard"
},
size: {
type: String,
default: "normal",
validator(value) {
// below I want to access the props `type` from above.
return (this.type !== "caution" || this.type !== "primary") && value !== "mega"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到TypeError: Cannot read property 'type' of undefined. 任何的想法?
tha*_*ksd 12
将this在道具的变量validator不引用Vue的实例。而且,不幸的是,没有真正的方法可以在 prop 的validator函数中引用另一个 prop 的值。
您可以做的一件事是在 Vue 实例的$props对象上设置一个观察者,将immediate选项设置为true以便在创建组件时触发观察者。该观察者可以触发验证逻辑,其中this是对 Vue 实例的引用。
这是一个简单的例子:
Vue.config.productionTip = false;
Vue.config.devtools = false;
Vue.component('child', {
template: '<div></div>',
props: {
type: {
type: String,
default: "standard"
},
size: {
type: String,
default: "normal"
}
},
methods: {
validateProps() {
if ((this.type === "caution" || this.type === "primary") && this.size === "mega") {
console.error('Invalid props');
}
}
},
watch: {
$props: {
immediate: true,
handler() {
this.validateProps();
}
}
}
});
new Vue({
el: '#app'
});Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<child type="caution" size="mega"></child>
</div>Run Code Online (Sandbox Code Playgroud)
另一种选择是将具有typeandsize属性的对象作为单个 prop传递。这样validator,那个道具的 就会有对这两个值的引用。
Vue.config.productionTip = false;
Vue.config.devtools = false;
Vue.component('child', {
template: '<div></div>',
props: {
config: {
type: Object,
default: () => ({ type: "standard", size: "normal" }),
validator({ type, size }) {
return !((type === "caution" || type === "primary") && size === "mega");
}
}
}
});
new Vue({
el: '#app'
});Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<child :config="{ type: 'caution', size: 'mega'}"></child>
</div>Run Code Online (Sandbox Code Playgroud)
(请注意:您的验证逻辑可能不正确。正如所写的那样,括号中的语句将始终评估为true。我在示例中更新了该逻辑,使我认为您的意思。)
| 归档时间: |
|
| 查看次数: |
3261 次 |
| 最近记录: |