2017-10-16 72 views
0

我有以下HTML結構:綁定相同的類和事件到多個動態生成的元素

<a href="#" @click.prevent="toggleClass">Show/Hide</a><br> 
<li :class="{myClass: showItems}">Item 1</li> 

<a href="#" @click.prevent="toggleClass">Show/Hide</a><br> 
<li :class="{myClass: showItems}">Item 2</li> 

<a href="#" @click.prevent="toggleClass">Show/Hide</a> 
<li :class="{myClass: showItems}">Item 3</li> 

而JS:

new Vue({ 
    el: '#app', 
    data: { 
    showItems: true 
    }, 
    methods: { 
    toggleClass: function(){ 
     this.showItems = !this.showItems; 
    } 
    } 
}); 

當我點擊<a>元件中的任何一個,則toggleClass()方法被執行其設定showItems要麼truefalse最終被施加到所有的元件。並且因爲<li>元素是通過php foreach循環動態生成的,所以我沒有手動控制元素的類名稱。

在for循環中,HTML結構可能是這個樣子:

foreach($items as $item): 
    <a href="#" @click.prevent="toggleClass">Show/Hide</a><br> 
    <li :class="{myClass: showItems}">Item $item</li> 
endforeach 

如何應對這種局面?這裏是一個JSBin Demo

+0

沒有在foreach ... –

+0

這是因爲foreach是一個PHP構造和地方我上傳了代碼,只支持javascript。 – Eisenheim

+0

毫米,那麼你需要使它的Vue下... –

回答

1

你的方法爲n OT好:被PHP產生<li>

你應該通過$項目爲JSON到客戶端,然後通過v-for

HTML渲染他們:

<script> 
    window.vueData = {items: <?php echo json_encode($items) ?>} 
</script> 
<ul> 
    <li v-for="(item,index) in items"> 
     <span :class="{myClass: showItems[index]}">item {{ item }}<span> 
     <a href="#" @click.prevent="showItems[index] = !showItems[index]">Show/Hide</a> 
    </li> 
</ul> 

JS

new Vue({ 
    el: '#app', 
    data: { 
    items: window.vueData.items, 
    showItems: window.vueData.items.map(() => {return true;}), 
    } 
}); 
在您的演示THRE
+0

'showItems陣列中的每個元素的成分:window.items.map(()=> {return true;}),'是window.items.map()'還是'this.items.map()'? – Eisenheim

+0

這是我的錯!正確的代碼是:'window.vueData.items.map(()=> {return true;})'。 –

0

只是想法的演示,如果你正在使用的物品所有人的陣列需要定製「showItems」所以這是一個演示代碼(不TESTD,總部設在你的):

foreach($items as $item): 
    <a href="#" @click.prevent="toggleClass($item)">Show/Hide</a><br> 
    <li :class="{myClass: $item.showItems}">Item $item</li> 

endforeach 

而在methos切換:

methods: { 
    toggleClass: function(item){ 
     item.showItems = !item.showItems; 
    } 
    } 

當然,Vue公司是根據不同的,這不是代碼,做工精細,但給你的想法會碰巧

+0

我無法理解這一部分:'item.showItems = item.showItems;',我使用'this.showItems',因爲它是訪問'showItems'財產!一個數據屬性。你爲什麼在'item'上調用它? 'item'沒有一個叫'showItems' – Eisenheim

+0

是自定義對象項目屬性 –

+0

財產,但你不將其通過'toggleClass($項目)'?在這裏,'$ item'來自for循環,這怎麼定製? – Eisenheim

相關問題