gpt4 book ai didi

javascript - 绑定(bind)到数组在 vue 实例中不起作用

转载 作者:行者123 更新时间:2023-11-28 05:54:46 25 4
gpt4 key购买 nike

我正在尝试了解 vue.js,但我似乎缺少一些重要的东西。

我有几个盒子,我希望它们像 Accordion 一样工作(只显示一个;打开另一个盒子会关闭前一个盒子)。这是我的代码:

<div id="app">

<div class="block">
<button v-on:click="mytoggle(0,$event)">block one</button>
<div v-if="boxes[0]">
<p>i am box number one</p>
<p>i am box number one</p>
</div>
</div>

<div class="block">
<button v-on:click="mytoggle(1,$event)">block two</button>
<div v-if="boxes[1]">
<p>i am box number two</p>
<p>i am box number two</p>
</div>
</div>

<div class="block">
<button v-on:click="mytoggle(2,$event)">block three</button>
<div v-if="boxes[2]">
<p>i am box number three</p>
<p>i am box number three</p>
</div>
</div>

<pre>{{ $data | json }}</pre>

</div>

和脚本:

var vm = new Vue({
el: '#app',

methods: {
mytoggle: function (n, event) {
event.preventDefault();
for(var i = 0; i < 3; i++) { // close all boxes
this.boxes[i] = false;
}
this.boxes[n] = true; // open the corresponding box
console.log(n);
}
},

data: {
boxes: [false,true,false]
}
});

加载页面时,将显示第二个框(这是正确的,因为框数组中的第二个元素为 true)。

但是单击按钮不会更改boxes.array 也不会更改框的显示。日志告诉我,这样的脚本似乎可以工作,因为当我单击按钮时,我得到了记录的正确值。所以我想它是装订中的东西。有人可以引导我走上正确的道路吗?

最佳答案

试试这个:

HTML:

<div id="app">

<div class="block">
<button @click.prevent="mytoggle(0)">block one</button>
<div v-show="boxes[0].show">
<p>i am box number one</p>
<p>i am box number one</p>
</div>
</div>

<div class="block">
<button @click.prevent="mytoggle(1)">block two</button>
<div v-show="boxes[1].show">
<p>i am box number two</p>
<p>i am box number two</p>
</div>
</div>

<div class="block">
<button @click.prevent="mytoggle(2)">block three</button>
<div v-show="boxes[2].show">
<p>i am box number three</p>
<p>i am box number three</p>
</div>
</div>

<hr/>

<pre>{{ boxes | json}}</pre>

</div>

Vue:

var vm = new Vue({
el: '#app',
data: {
boxes: [{show:false},{show:true},{show:false}]
},
methods: {
mytoggle: function (n) {
for(var i = 0; i < 3; i++) { // close all boxes
vm.boxes[i].show = false;
}
vm.boxes[n].show = true; // open the corresponding box
}
}
});

fiddle : https://jsfiddle.net/crabbly/9a6bua6x/

编辑:

您还可以仅更改 mytoggle 方法,以使用 Vue 的 $set 更改数组值:

mytoggle: function (n, event) {
event.preventDefault();
for(var i = 0; i < 3; i++) { // close all boxes
this.boxes.$set(i, false);
}
this.boxes.$set(n, true); // open the corresponding box
console.log(n);
}

关于javascript - 绑定(bind)到数组在 vue 实例中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793755/

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