v-for与v-if

<template>

<div>

<template>//这里是渲染的按钮

      <el-button :type="item.type" v-for="(item,index) in btnList" :key="index" @click="handleEvt(item.prop)">{{item.name}}</el-button>

</template>

//v-for基于源数据多次渲染元素或模板块.指令基于一个数组来渲染一个列表.v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。为当前遍历的元素提供别名 <div v-for="item in items">{{ item.text }}</div>:另外也可以为数组索引指定别名 (或者用于对象的键)<div v-for="(val,name,index) in object"></div>:

//v-for 的默认行为会尝试原地修改元素而不是移动它们。要强制其重新排序元素,你需要用特殊 attribute key 来提供一个排序提示:<div v-for="item in/of items" :key="item.index">{{ item.text }}</div>为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key attribute.建议尽可能在使用 v-for 时提供 key attribute,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为以获取性能上的提升。因为它是 Vue 识别节点的一个通用机制,key 并不仅与 v-for 特别关联。后面我们将在指南中看到,它还具有其它用途。不要使用对象或数组之类的非基本类型值作为 v-for 的 key。请用字符串或数值类型的值。

//Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。有相同父元素的子元素必须有独特的 key。重复的 key 会造成渲染错误。它也可以用于强制替换元素/组件而不是重复使用它。当你遇到如下场景时它可能会很有用:完整地触发组件的生命周期钩子/触发过渡.

//当和 v-if 一起使用时,v-for 的优先级比 v-if 更高。这意味着 v-if 将分别重复运行于每个 v-for 循环中。当你只想为部分项渲染节点时,这种优先级的机制会十分有用。而如果你的目的是有条件地跳过循环的执行,那么可以将 v-if 置于外层元素 (或 <template>) 上。

//在 v-for 块中,我们可以访问所有父作用域的 property。在data里parentMessage: 'Parent',{{ parentMessage }} - {{ index }} - {{ item.message }}。

//也可以用 v-for 来遍历一个对象的 property。第一个是值,第二个是键,第三个是索引. <div v-for="(index//索引 , name//键名 , value) in object"{{ index }}. {{ name }}: {{ value }}</div>  data: {  object: { title: 'How to do lists in Vue ' , author: 'Jane Doe', publishedAt: '2016-04-10'    }  }


<div>//这里是渲染的选择栏

<el-input v-model="queryObj[item.prop]" :placeholder="item.place" v-for="(item,index) in condition" :key="index" v-if="item.type=='input'" style="width:200px ; marginRight:20px"></el-input>

<el-select v-model="queryObj[item.prop]" :placeholder="item.place" v-for="(item,index) in condition" :key="index" v-if="item.type=='select'" style="marginRight:20px">

        <el-option v-for="opt in item.option" :key="opt.id" :label="opt.label" :value="opt.value"></el-option>

</el-select>

</div>


<template>//这里是渲染的表格

      <el-table :data="tableData" border style="width: 100%;marginTop:20px">

        <el-table-column type="selection" width="55"></el-table-column>//这是选择框

        <el-table-column v-for="(item,index) in tableHeader" :key="index" :prop="item.prop" :label="item.title" fit >//没有特殊样式的表格

          <template slot-scope='scope'>

            <img :src="scope.row.img" alt="" v-if="item.prop=='img'">//显示的顺序是根据id来的

            <el-button v-else-if="item.prop=='statistics'" type="text" @click="showStatic(scope.row)">查看</el-button>

            <span v-else>{{scope.row[item.prop]}}</span>//除了特殊的图片和按钮,别的都是span样式,prop

          </template>

        </el-table-column>

    </el-table>//这里可以加分页的组件。

</template>



<script>

export default {

  name:'List',

data(){

    return{

      btnList:[

        {name:'添加广告',type:'primary',prop:'add',show:true},

        {name:'广告设置',type:'primary',prop:'setting',show:true},

        {name:'试一试',type:'primary',prop:'try',show:true}

      ],

      condition:[

        {title:'标题',type:'input',prop:'title',show : true ,place:'请输入标题'},

        {title:'渠道',type:'select',prop:'channel', show : true , place:'请选择渠道',option:[{label:'全部渠道',value:'all',id:0},{label:'华为',value:' huawei',id:1},{label:'小米',value:' xiao mi',id:2}]},

        {title:'类型',type:'select',prop:'type',show:true,place:'请选择类型',option:[{label:'开屏广告',value:'kaiping',id:0},{label:'banner广告',value:'banner',id:1},{label:'弹窗广告',value:'dialog',id:2}]},

      ],

      queryObj:{

        title:'',

        channel:'all',

        type:'',

      },

      tableHeader:[

        {title:'标题',prop:'title',child:[],id:0,show:true},

        {title:'类型',prop:'type',child:[],id:1,show:true},

        {title:'图片',prop:'img',child:[],id:2show:true},

        {title:'数据统计',prop:'statistics',child:[],id:3,show:true},

      ],

      tableData:[{title:'七夕节活动',type:'开屏广告',img:' '}],


     }

}    ,

    methods:{

//点击事件

    handleEvt(prop){

      if(prop=='add'){

        this.showDialog=true

        this.$refs.adverDialog.openDia()  //openDia()是写在弹窗组件里的显示弹窗的方法。

      }else if(prop=='setting'){

        this.showSetDialog=true

        this.$refs.setDialog.openDia()

      }else{

        this.showTryDialog=true

        this.$refs.tryDialog.openDia()

      }

    },

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351