詳解vue中v-for和v-if一起使用的替代方法template
vue中v-for和v-if一起使用的替代方法template
版本
vue 2.9.6
element-ui: 2.15.6
目標效果
說明
在 vue 2.x 中,在一個元素上同時使用 v-if 和 v-for 時,v-for 會優(yōu)先作用
解決方法
- 選擇性地渲染列表,例如根據(jù)某個特定屬性(
category
)來決定不同展示渲染,使用計算屬性computed 見http://www.dbjr.com.cn/article/247179.htm - 使用
template
占位,將循環(huán)放在template中,v-if作用于元素,此方法script
中不用定義computed方法
核心代碼片段
<div> <el-divider content-position="left">奧迪</el-divider> <template v-for="(item, index) in links"> <el-link type="primary" target="_blank" :href="item.url" :key="index" v-if="item.category==0"> <el-button type="primary">{{item.name}}</el-button> </el-link> </template> <el-divider content-position="left">奔馳</el-divider> <template v-for="(item, index) in links"> <el-link type="primary" target="_blank" :href="item.url" :key="index" v-if="item.category==1"> <el-button type="primary">{{item.name}}</el-button> </el-link> </template> <el-divider content-position="left">寶馬</el-divider> <template v-for="(item, index) in links"> <el-link type="primary" target="_blank" :href="item.url" :key="index" v-if="item.category==2"> <el-button type="primary">{{item.name}}</el-button> </el-link> </template> </div>
Car.vue
<template> <div> <el-row> <el-col :span="24"> <el-form :inline="true" class="user-search"> <el-form-item> <el-button size="small" type="primary" icon="el-icon-plus" @click="handleEdit()" plain>添加鏈接</el-button> </el-form-item> </el-form> <div> <el-divider content-position="left">奧迪</el-divider> <template v-for="(item, index) in links"> <el-link type="primary" target="_blank" :href="item.url" :key="index" v-if="item.category==0"> <el-button type="primary">{{item.name}}</el-button> </el-link> </template> <el-divider content-position="left">奔馳</el-divider> <template v-for="(item, index) in links"> <el-link type="primary" target="_blank" :href="item.url" :key="index" v-if="item.category==1"> <el-button type="primary">{{item.name}}</el-button> </el-link> </template> <el-divider content-position="left">寶馬</el-divider> <template v-for="(item, index) in links"> <el-link type="primary" target="_blank" :href="item.url" :key="index" v-if="item.category==2"> <el-button type="primary">{{item.name}}</el-button> </el-link> </template> </div> <!-- 添加界面 --> <el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @click="closeDialog"> <el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm"> <el-form-item label="鏈接名稱" prop="name"> <el-input size="small" v-model="editForm.name" auto-complete="off" placeholder="請輸入鏈接名稱"></el-input> </el-form-item> <el-form-item label="鏈接地址" prop="url"> <el-input size="small" v-model="editForm.url" auto-complete="off" placeholder="請輸入鏈接地址"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button size="small" @click="closeDialog">取消</el-button> <el-button size="small" type="primary" :loading="loading" class="title" @click="submitForm('editForm')">保存</el-button> </div> </el-dialog> </el-col> </el-row> </div> </template> <script> import { getLink, saveLink } from '../../api/userMG' export default { data() { return { links: [], loading: false, //顯示加載 editFormVisible: false, //控制添加頁面顯示與隱藏 title: '添加鏈接', editForm: { name: '', url: '' }, // rules表單驗證 rules: { name: [{ required: true, message: '請輸入鏈接名稱', trigger: 'blur' }], url: [{ required: true, message: '請輸入鏈接地址', trigger: 'blur' }] }, } }, created() { // 獲取鏈接 this.getdata() }, // 這下面的方法只有被調(diào)用才會被執(zhí)行 methods: { // 獲取鏈接 getdata() { this.loading = true getLink().then((response) => { this.loading = false console.log(response.data) this.links = response.data }).catch(error => { console.log(error) }) }, // 添加頁面方法 handleEdit: function() { this.editFormVisible = true this.title = '添加鏈接', this.editForm.name = '', this.editForm.url = '' }, // 添加保存頁面方法 submitForm(editData) { this.$refs[editData].validate(valid => { if (valid) { saveLink(this.editForm).then(response => { this.editFormVisible = false this.loading = false // if (response.success) this.getdata() this.$message({ type: 'success', message: '鏈接添加成功' }) }).catch(error => { this.editFormVisible = false this.loading = false // console.log(error.response.data['url'][0]) // console.log(error.response.status) // this.$message.error('鏈接添加失敗,請稍后再試') if (error.response.status == 400 ) { this.$message.error(error.response.data['url'][0]+'如: http://xxx 或 https://xxx') }else { this.$message.error('鏈接添加失敗,請稍后再試') } }) } }) }, // 關(guān)閉添加鏈接窗口 closeDialog() { this.editFormVisible = false } } } </script> <style> /* .el-row { margin-top: 10px; } */ .el-link { margin-right: 5px; } </style>
到此這篇關(guān)于詳解vue中v-for和v-if一起使用的替代方法template的文章就介紹到這了,更多相關(guān)vue 替代方法template內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問題解決方案
這篇文章主要介紹了詳解vue-cil和webpack中本地靜態(tài)圖片的路徑問題解決方案,非常具有實用價值,需要的朋友可以參考下2017-09-09vue3.x中useRouter()執(zhí)行后返回值是undefined問題解決
這篇文章主要給大家介紹了關(guān)于vue3.x中useRouter()執(zhí)行后返回值是undefined問題的解決方法,文中通過代碼示例介紹的非常詳細,對大家學習或者使用vue3.x具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09vue中前進刷新、后退緩存用戶瀏覽數(shù)據(jù)和瀏覽位置的實例講解
今天小編就為大家分享一篇vue中前進刷新、后退緩存用戶瀏覽數(shù)據(jù)和瀏覽位置的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09