vue入门3---class与style绑定、条件渲染指令、列表渲染

一、class与style绑定

  • 1.在应用界面中, 某个(些)元素的样式是变化的
    class/style 绑定就是专门用来实现动态样式效果的技术
  2. class绑定:
    class='xxx'
    xxx是字符串: 'classA'
    xxx是对象: {classA:isA, classB: isB}
    xxx是数组: ['classA', 'classB']
  3. style绑定
    :style="{color: activeColor, fontSize: fontSize +    'px'}",activeColor/fontSize是data属性
<style>
    .aClass {
        color: #f00;
    }
    .bClass {
        color: #00f;
    }
</style>
<div id="demo1">
    <h1>class绑定</h1>
    <p class="cClass" :class="a">xxx是字符串</p>
    <!--属性名:类的名字,属性值:true/false-->
    <p :class="{aClass: isA, bClass: isB}">xxx是对象</p>
    <p :class="['aClass', 'bClass']">xxx是数组</p>
    <button type="button" @click="update">更改</button>
    <p :style="{color: activeColor, fontSize: fontSize + 'px'}">style绑定</p>    <!--{} 是js对象-->
</div>
<script>
 var vm1 = new Vue({
        el: '#demo1',
        data: {
            a: 'aClass',
            isA: true,
            isB: false,
            activeColor: 'red',
            fontSize: 20
        },
        methods: {
            update() {
                // 一定用this引用data中变量名
                this.a = 'bClass';
                this.isA = false;
                this.isB = true;
                this.activeColor = 'green';
                this.fontSize = 30;
            }
        }
    });
</script>

二、条件渲染指令:

  • v-if
  • v-else
  • v-show
  • v-if 与 v-show的区别

    v-if 隐藏是通过将标签移除;v-show是通过style display=none,标签还存在;v-if还需要创建标签才可以显示,标签过多的话影响速度。

<div id="demo2">
<p v-if="ok">成功了</p>
<p v-else>失败</p>

<p v-show="ok">show成功了</p>
<p v-show="!ok">show失败</p>
<button @click="ok=!ok">切换</button>
</div>
<script>
new Vue({
   el: '#demo2',
   data: {
      ok: false
   }
})
</script>

三、列表渲染

  • 定义: 使用v-for指令根据一组数组的选项列表进行渲染
  • 注:1.v-for是1.0之后的版本才有的,1.0之前的版本用v-repeat
    2.在 v-for 块中,我们拥有对父作用域属性的完全访问权限。v-for 还支持一个可选的第二个参数为当前项的索引;
    3.vue本身只是监视数组的改变,没有监视数组内部数据的改变,因此vue重写了数组中的一系列改变数组内部结构数据的方法,即变异方法,如splice、push等,可实现--原生功能、更新界面
1、替换与删除
<!--
1. 列表显示
  数组: v-for / index
  对象: v-for / key
2. 列表的更新显示
  删除item
  替换item
-->
<div id="demo">
  <h2>测试: v-for 遍历数组</h2>
  <ul>
    <li v-for="(p, index) in persons" :key="index">
      {{index}}--{{p.name}}--{{p.age}}
      --<button @click="deleteP(index)">删除</button>
      --<button @click="updateP(index, {name:'Cat', age: 16})">更新</button>
    </li>
  </ul>
  <button @click="addP({name: 'xfzhang', age: 18})">添加</button>
  <h2>测试: v-for 遍历对象</h2>
  <ul>
    <li v-for="(item, key) in persons[1]" :key="key">{{key}}={{item}}</li>
  </ul>
</div>
<script type="text/javascript">
  new Vue({
    el: '#demo',
    data: {
      persons: [ // vue本身只是监视persons的改变,没有监视数组内部数据的改变
        {name: 'Tom', age:18},
        {name: 'Jack', age:17},
        {name: 'Bob', age:19},
        {name: 'Mary', age:16}
      ]
    },
    methods: {
      deleteP (index) {
      // 删除persons中指定index的内容
        this.persons.splice(index, 1) 
      // 此处splice,调用了不是原生数组的splice(), 而是一个vue变异方法,功能: // 1. 调用原生的数组的对应方法 // 2. 更新界面
      },
     updateP (index, newP) {
        console.log('updateP', index, newP)
        // this.persons[index] = newP  // 并没有改变persons本身,数组内部发生改变,并没有调用变异方法
        this.persons.splice(index, 1, newP)
        // this.persons = [] //改变person
      },

      addP (newP) {
        this.persons.push(newP)
      }
    }
  })
</script>
2、过滤与排序

想要显示一个数组的过滤或排序副本,而不实际改变或重置原始数据。在这种情况下,可以创建返回过滤或排序数组的计算属性。

<div id="demo">
  <input type="text" v-model="searchName">
  <ul>
    <li v-for="(p, index) in filterPersons" :key="index">
      {{index}}--{{p.name}}--{{p.age}}
    </li>
  </ul>
  <div>
    <button @click="setOrderType(2)">年龄升序</button>
    <button @click="setOrderType(1)">年龄降序</button>
    <button @click="setOrderType(0)">原本顺序</button>
  </div>
</div>
<script type="text/javascript">
  new Vue({
    el: '#demo',
    data: {
      searchName: '',
      orderType: 0, // 0代表不排序, 1代表降序, 2代表升序
      persons: [
        {name: 'Tom', age:18},
        {name: 'Jack', age:17},
        {name: 'Bob', age:19},
        {name: 'Mary', age:16}
      ]
    },
    computed: {
      // 计算属性:可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新。
      filterPersons () {
        // 取出相关数据
        const {searchName, persons, orderType} = this;
        // 最终需要显示的数组
        let arr;
        // 过滤数组
        if(searchName.trim()) {
          arr = persons.filter(p => p.name.indexOf(searchName)!==-1)
        }
        // 排序
        if(orderType) {
          arr.sort(function (p1, p2) { // 如果返回负数 p1在前,返回正数P2在前
            if(orderType===1) { // 降序
              return p2.age-p1.age;
            } else { // 升序
              return p1.age-p2.age;
            }
          })
        }
        return arr;
      }
    },
    methods: {
      setOrderType (orderType) {
        this.orderType = orderType;
      }
    }
  })
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容