gpt4 book ai didi

javascript - 如何动态添加vue bootstrap下拉列表项?

转载 作者:行者123 更新时间:2023-11-29 17:34:29 24 4
gpt4 key购买 nike

我正在尝试使用 bootstrap-vue 动态添加下拉列表项,但我无法将下拉列表项呈现给浏览器。到目前为止,这是我所拥有的,任何输入将不胜感激。我希望它是动态的,这样如果原始 JSON 发生更改,下拉列表项将随之更改,而无需返回并更改代码。

注意:reportData 是一个对象列表,这就是为什么我将 reportData 的第一个元素设置为我希望从中呈现下拉列表项的 newData。

下拉列表组件:

  <section class="drop-down">
<div>
<b-dropdown id="dropdown-list" text="Error Reports" class="m-md-2">
<b-dropdown-item >ITEM</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
</b-dropdown>
</div>

<button @click="changeReport">Click to change</button>
</section>
</template>

<script lang="js">

export default {
name: 'drop-down',
props:['reportData'],
data () {
return {
newData: this.reportData[0]
}
},
methods: {
changeReport(){
this.newData = this.reporData[1]
}
},
watch: {
newData : function(val, OldVal){
var dropdownList = document.getElementById("dropdown-list")
for (var key in val){
console.log(key)
var dropdownItem = document.createElement('b-dropdown-item')
dropdownItem.value = key
dropdownList.add(drowdownItem, 0)
}
}
}
}


</script>

<style>

</style>

最佳答案

在使用 Vue 时尽量避免直接操作 DOM。在这种情况下,您最好的选择是将当前事件数据设置为您想要显示的任何列表。然后,在模板中循环遍历每个事件数据项。

new Vue({
el: "#app",
data: {
reportData: [{
text: 'Item 1 Text',
value: 'Item 1 Value'
}, {
text: 'Item 2 Text',
value: 'Item 2 Value'
}, {
text: 'Item 3 Text',
value: 'Item 3 Value'
}],
}
})
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css" />

<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>

<div id="app">
<section class="drop-down">
<b-dropdown text="Error Reports" class="m-md-2">
<b-dropdown-item v-for="(item, key) in reportData" :key="key">
{{ item.text }}: {{ item.value }}
</b-dropdown-item>
</b-dropdown>
</section>
</div>

如果您有任何问题,请随时告诉我。


编辑:

如果您有嵌套的对象数组并且您提前知道其结构,以下示例可能有助于阐明您需要做什么。

但是,如果您不知道树的深度,您可能不得不考虑使用 recursive components .

new Vue({
el: "#app",
data: {
// This is your input data
dataStore: [{
name: 'Item 1',
value: [{
text: 'SubItem 1 Text',
value: 'SubItem 1 Value'
}, {
text: 'SubItem 2 Text',
value: 'SubItem 2 Value'
}, {
text: 'SubItem 3 Text',
value: 'SubItem 3 Value'
}]
}, {
name: 'Item 2',
value: [{
text: 'SubItem 1 Text',
value: 'SubItem 1 Value'
}, {
text: 'SubItem 2 Text',
value: 'SubItem 2 Value'
}, {
text: 'SubItem 3 Text',
value: 'SubItem 3 Value'
}, {
text: 'SubItem 4 Text',
value: 'SubItem 4 Value'
}, {
text: 'SubItem 5 Text',
value: 'SubItem 5 Value'
}, ]
}],

// This is the data we will display
activeData: null
},

created() {
// The value that will be selected upon creation
this.activeData = this.dataStore[0]
},

methods: {
changeData() {
this.activeData = this.dataStore[1]
}
}
})
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css" />

<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>

<div id="app">
<section v-if="activeData" class="drop-down">
<h2>{{ activeData.name }}</h2>
<b-dropdown text="Error Reports" class="m-md-2">
<b-dropdown-item v-for="(item, key) in activeData.value" :key="key">
{{ item.text }}: {{ item.value }}
</b-dropdown-item>
</b-dropdown>
</section>

<button @click="changeData">Change Data Item</button>
</div>

关于javascript - 如何动态添加vue bootstrap下拉列表项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58456113/

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