vue.js - vue 属性作为没有值的道具名称
问题描述
我想传递一个没有任何值的属性 - 只有名称。我希望名称根据道具是动态的。
我想创建一个工具提示组件,以获取工具提示侧 -> 左上角或右下角。在 v-tooltip 中没有属性side,所有 side 都是另一个没有价值的属性。我希望它根据道具进行更改(侧是一个变量 - 我的组件的道具)。
<template>
<v-tooltip side>
<template slot="activator">
<slot slot="activator"></slot>
</template>
<span>{{text}}</span>
</v-tooltip>
</template>
<script>
export default {
props: {
text: {
type: String,
required: true,
},
side: {
default: 'top',
},
},
}
</script>
我找不到使用 prop 作为属性名称的方法
解决方案
您需要意识到两件事。在 Vue 中,使用<my-component has-this-prop />
它调用组件与使用<my-component :has-this-prop="true" />
. 布尔值基本上切换道具。
您还可以使用v-bind
不带道具名称的语法动态更改绑定到组件的道具,如文档中所述。
这意味着,如果您side
在父组件中调用了一个始终包含正确边的 prop,您可以创建一个包含您要传递的所有 props 的计算属性,然后v-bind
在您上使用v-tooltip
来传递 props:
<template>
<v-tooltip v-bind="tooltipProps">
<!-- Something -->
</v-tooltip>
</template>
<script>
const validSides = [
'top',
'top left',
'top center',
'top right',
// you get the idea
];
export default {
props: {
side: {
type: String,
default: 'top',
validator(prop) {
return validSides.contains(prop);
}
}
},
computed: {
tooltipProps() {
if (!validSides.contains(this.side)) {
return {};
}
const propsNames = this.side.split(' ');
const props = {};
for (const propName of propsNames) {
props[propName] = true;
}
return props;
}
}
}
</script>
推荐阅读
- c# - 有没有比单独将安全组中的 IP 列入白名单更好的方法让我的 WPF 应用程序连接到 AWS RDS?
- python-3.x - 如何在不重绘图形的情况下更新绘图
- python - PyQt5 - 如何为相同的元素设置不同的样式表?
- opengl - 为什么定义浮点数时的“f”后缀有时会导致 GLSL 编译器错误?
- python - Python 神经网络值收敛到 50%
- gcc - 为什么添加独立选项后 printf 功能仍然可用
- r - 如何在R中的数据框的特定列中查找和替换某些关键字?
- javascript - 如何从另一个选择中获取先前选择的值到当前选择onclick?
- yacc - lex 和 yacc 中有删除语法吗?
- firebase - 如何使用控制台在 Firebase 实时数据库中添加根级节点