我知道我可以使用v-bind
动态地为属性设置值,但是我想动态地添加属性,而不是值。像这样的东西(尽管这是无效的):
<a
:href="url"
{{ downloadable ? 'download' : null }}
class="link"
@click="onClick">
{{ text }}
</a>
注意:我没有使用JSX
我当时正在考虑使用$attrs
(https://vuejs.org/v2/api/#vm-attrs),但这是只读的。
有没有办法在Vue上做到这一点?
解决方案:
JavaScript:
new Vue({
el: '#app',
data() {
return {
msg: 'Inspect element to test',
downloadable: true
}
},
computed: {
dynamicAttribute() {
if(!this.downloadable) {
return null
}
return { [`download`]: "link or w/e" }
}
}
})
HTML:
<a v-bind="dynamicAttribute">{{msg}}</a>
答案 0 :(得分:1)
除布尔属性外,您无法使用Vue.js动态添加或设置属性。例如-
v-bind:disabled="isActive"
如果isActive为true,则将 disabled 属性添加到该元素,否则将其删除。此机制不适用于非布尔值的其他属性。
您可以为此使用Javascript-
element.setAttribute('attributeName', 'value');
答案 1 :(得分:1)
如果您希望它看起来像这样:
<a ... download="value">text</a>
只有在download
为真时,downloadable
才可见,实际上您可以使用v-bind
来做到这一点:
https://jsfiddle.net/eywraw8t/274691/
您可以通过将downloadable
更改为true或false并检查元素来检查其是否有效。