使用vue實現tab操作
在使用jQuery類庫實現tab功能時,是獲取滑鼠在mousenter或click時的index值,然後切換到當前的標題和內容,把其他的標題和內容的狀態去掉:
$(".tab .title").find(".item")
.removeClass("current").eq(index).addClass("current"); // 為index位置的title添加current
$(".tab .content").find(".item")
.hide.eq(index).show; // 顯示index位置的內容
那麼在使用vue實現tab功能時,就不是像jQuery這種直接操作DOM了。我這裡總結了下實現tab功能的3個思路,僅供參考。
1. 切換content或者直接切換內容這種思路下,我們首先把結構搭建起來,然後用一個變數selected
表示tab當前展示的位置,給li標籤添加mouseenter或click事件,將當前的index傳遞進去:
html代碼:
js代碼:
{{message}} `var app = new Vue({
el: "#app",
data: {
selected: 0, //當前位置
list: [
{
title: "11111",
content: "11111content"
},
{
title: "22222",
content: "222222content"
},
{
title: "33333",
content: `
}
]
},
methods: {
change(index) {
this.selected = index;
}
}
})
綁定的change(index)
事件,每次都將index給了selected
,然後tab就會切換到對應的標籤。
上面的代碼里,我們是通過切換div的顯示與隱藏來進行執行的。tab中的content里如果只有純html內容,我們可以直接把list[selected].content
展示到.bd中:
每次selected變換時,bd的內容都會發生變化。
2. 使用currentView在上面的實現方式中,第3個tab里有個輸入框與p標籤雙向綁定,但是沒有效果,因為vue是把list中的內容作為html元素填充到頁面中的,message並沒有作為vue的屬性綁定給input。那麼使用組建和currentView就能彌補這個缺陷。
無論使用全局註冊還是局部註冊的組件,思路都是一樣的,我們暫時使用全局註冊的組件來實現。
每個組件里展示的是一個tab里的內容,先註冊3個組件:
" " {{message}} `// tab0
Vue.component("item0",{
template : "
});
// tab1
Vue.component("item1",{
template : "
})
// tab2
Vue.component("item2",{
data{
return{
message : ""
}
},
template : `
})
然後在html中使用component來展示對應組件的內容,title的展示方式不變:
currentView
屬性可以讓多個組件可以使用同一個掛載點,並動態切換:
var app = new Vue({
el: "#app",
data: {
selected: 0,
currentView : "item0",
list: [
{
title: "11111"
},
{
title: "22222"
},
{
title: "33333"
}
]
},
methods: {
change(index) {
this.selected = index;
this.currentView = "item"+index; // 切換currentView
}
}
})
這樣 message 在組件里就是一個獨立的data屬性,能在tab里也使用vue綁定事件了。
3. 使用slot方式等使用slot
方式進行內容分發或者一個獨立的組件,可以讓我們把代碼整合到一塊,對外提供一個數據介面,只要按照既定的格式填寫數據即可。
用slot方式寫一個子組件:
`Vue.component("my-slot-tab", {
props : ["list", "selected"],
template : `
});
父組件模板:
父組件中slot="title"
會替換子組件中name="title"
的slot,父組件中slot="content"
會替換子組件中name="content"
的slot.最終渲染出來的tab結構與上面之前的代碼一樣。
還有一種方式就是把所有的模板都寫到組件中。 子組件:
`,Vue.component("my-tab", {
props : ["list"],
template : `
data{
return{
selected:0
}
},
methods : {
change(index){
this.selected = index;
}
}
});
父組件:
這種只需要傳遞一個list即可。
對比這兩種方法,slot中可以自定義更多的內容,而下面的方法使用起來更加簡單,只是自定義的東西比較少。
4. 總結上面講解了幾種實現tab功能的方式,沒有說哪種方式最好,選擇最適合自己項目需求的方式就是最好的。文中有哪有錯誤或不足,歡迎批評指正。


※Backbone中父子view之間的值傳遞
※Socket實現-Socket I/O
※C++基礎之引用與指針的區別與聯繫、常引用使用時應注意的問題
※Hugo快速搭建Blog
※設計模式解密(3)-策略模式
TAG:科技優家 |
※python使用pexpect實現ftp的操作
※net core下對於Excel的一些操作及使用
※binlog2sql 實現 MySQL 誤操作的恢復
※Linux vmstat命令實際操作介紹
※Google Analytics實際應用與Google編輯器的操作
※高效!Illustrator實用操作分享
※MapReduce實現之Reduce端重分區Join操作優化!
※Redis-BitMap 「數據結構」可以實現對位的操作
※Canonical推出新的Ubuntu操作系統
※使用Group操作碼實現代幣化
※使用PHP簡單操作Memcached
※Google決定用gLinux取代Goobuntu Linux操作系統
※自帶防丟失操作的耳機,Jabra Elite Active65t體驗
※BlackBoard功能與操作
※如何在Kubernetes中管理和操作Kafka集群
※python列表list的操作
※詳解 RestTemplate 操作
※可視化數據平台 Tableau 推出了 Tableau Prep,提供自動化處理助力小白客戶一鍵操作
※WebDriver 瀏覽器常用操作介紹
※Fuchsia 操作系統將支持運行 Linux 應用程序