首页 > 其他分享 >Vue学习笔记2--类样式绑定和内置指令v-xxx

Vue学习笔记2--类样式绑定和内置指令v-xxx

时间:2022-12-10 16:44:41浏览次数:51  
标签:xxx return -- 元素 list item Vue key

Class和Style绑定

class绑定

放置对象(常用)

:class="{类名:布尔}"

    <!-- 第一种 放置字符串-->
    <p class="active">hello</p>
    <!-- 第二种 放置对象-->
    <!-- <p :class="{类名:布尔}">hello</p> -->
    <p :class="{active:true}">hello1</p>
    <p :class="{active:isActive,helloWorld:isActive}">hello1</p>
    <button @click="isActive=!isActive">改变Active</button>
    <!-- 和普通类同时存在不会冲突 -->
    <p :class="{active:true}" class="helloWorld">hello1</p>
    <p :class="classObj">hello1</p>

使用computed

this.error表示是否渲染出来了

export default{
  data(){
    return{
      message:"helloWorld",
      isActive:true,
      error:null,
      classObj:{
        active:true,
        helloWorld:true,
      }
    }
  },
  computed:{
    classObjCom:function(){
      return{
        active:this.isActive && !this.error,
        helloWorld:this.error,
      }
    }
  }
}
    <p :class="classObjCom">hellocomputed</p>

传数组(不常用)

  data(){
    return{
      message:"helloWorld",
      activeClass:"active",
      ...
    }
  },
    <!-- 数组语法 -->
    <p :class="[activeClass,message]">hello2</p>
    <!-- 数组和对象结合 -->
    <p :class="[message,{active:isActive}]">hello3</p>

style绑定

  <!-- 第一种 放置字符串 -->
  <p style="color:red">hello</p>

:style="{ key:value }" 其中key是css属性名,value是属性值来自data

使用驼峰命名法,用font-size 50px要打引号

  data(){
    return{
      activeColor:'red',
      fontSize:'50px',
      bgcColor:'pink',
      styleObj:{
        color:'red',
        fontSize:'50px',
        'background-color':'pink',
      }
    }
  },
  <p :style="{color:activeColor,fontSize:fontSize,'background-color':bgcColor}">hello1</p>
  <p :style="styleObj">hello1</p>

和class类似经常结合computed使用,参考class即可

使用数组

  <p :style="[styleObj,{border:'5px solid blue'}]">hello2</p>

内置指令 v-xxx

一部分已经在上一篇力提到这里只记录常用的

v-if条件渲染使用

      <p v-if="age>18">我是个成年人</p>
      <p v-else-if="age==18">我今天刚好18</p>
      <!-- <p v-if="age<18">我是个小朋友</p> -->
      <p v-else>我是个小朋友</p>

template元素上使用条件渲染分组

template是不可见的包裹元素,最终渲染不会显示出来。

最后只有大于18岁的人才看的见,同时网页源码中不会出现template标签

      <template v-if="age>=18">
        <p>你好</p>
        <p>你好</p>
        <p>你好</p>
      </template>

v-show条件渲染

v-show会始终渲染并保留在DOM中,只是简单的遮蔽(切换元素的display CSS property)。v-show不支持template。

      <p v-show="sex=='man'">男生</p>
      <p v-show="sex=='woman'">女生</p>

v-if VS v-show

v-if只要条件不满足,对应元素和子元素都不会被渲染,控制dom元素的创建和销毁。

v-show只是隐藏

总结:分场景使用这两者,频繁切换状态使用v-show;一次性的、条件很少改变的使用v-if。

v-for列表渲染

v-for使用数组

export default{
  data(){
    return{
      person:['张三','李四','王五'],
    }
  },
};

item代表数组中每个元素,index表示下标。:key提供一个排序的提示,in和of同时都可以使用

    <ul>
      <li v-for="item in person" :key="item">{{item}}</li>
    </ul>
    <ul>
      <li v-for="(item,index) in person" :key="index">
        {{item}}-->{{index}}
      </li>
    </ul>
    <ul>
      <li v-for="(item,index) of person" :key="index">
        {{item}}-->{{index}}
      </li>
    </ul>

v-for使用对象

  data(){
    return{
      person:['张三','李四','王五'],
      personObj:{name:"张三",age:18,sex:"男"},
    }
  },

item代表键值,key表示键名

    <ul>
      <li v-for="(item,key,index) in personObj" :key="index">
          {{item}}-->{{key}}-->{{index}}
        </li>
    </ul>

维护状态

:key给vue提示排列顺序(跟踪每个节点身份,从而重用和重排现有元素)

export default{
  data(){
    return{
      person:['张三','李四','王五'],
      personObj:{name:"张三",age:18,sex:"男"},
    }
  },
  methods:{
    addPerson:function(){
      this.person.unshift('赵六');//插入到最前
    }
  }
};
    <ul>
      <li v-for="item in person">
        <input type="checkbox" name="" id="">{{item}}
      </li>
    </ul>
    <button @click="addPerson">增加用户</button>

如果不指定:key,那么将会发生:当我勾选张三后,再点击添加赵六,赵六成了第一个,钩变到赵六身上。

所以需要指定:key作为唯一的标识。快速找到节点,减少渲染次数,提高性能。

正确的写法:

    <ul>
      <li v-for="item in person" :key="item">
        <input type="checkbox" name="" id="">{{item}}
      </li>
    </ul>
    <button @click="addPerson">增加用户</button>

v-for数组更新

触发试图更新vue2和vue3的区别,vue3数组实现了彻底的响应式。

写一个列表,并且准备一个按钮点击更改。

  <div>
    <ul>
      <li v-for="item in list" :key="item">{{item}}</li>
    </ul>
    <button @click="changeList">改变数组</button>
  </div>
export default {
  data() {
    return {
      list: [1, 3, 6, 4, 5],
    };
  },
  methods: {
    changeList:function(){
		...
    },
  },
};

Vue3做法

vue3很强大直接下标修改,越界也可

  methods: {
    changeList:function(){
      this.list[5]=7;
    },
  },

Vue2做法

需要借助js来进行数组更改

push和pop

push();给数组末尾添加元素可以是多个

pop();删除掉数组的最末尾

  methods: {
    changeList:function(){
        this.list.push(7,8,9);
        this.list.pop();
    },
  },

shift和unshift

shift();删除首位

unshift();添加到首位可以是多个

  methods: {
    changeList:function(){
      this.list.shift();
      this.list.unshift(0,0,9);
    },
  },

splice

最为常用,可删除、插入、替换元素。

参数1:表示开始拆入或者开始删除的元素位置下标

参数2:想要传入or删除几个元素

  methods: {
    changeList:function(){
      //删除元素
      this.list.splice(1);//删除从[1]往后所有
      this.list.splice(1,2);//删除从[1]往后2个
      //插入元素
      this.list.splice(1,0,9);//参数2为0表示插入
      this.list.splice(1,0,9,8,7);//从[1]插入多个
      //替换元素
      this.list.splice(1,3,9,8,7);//参数2为三表示替换三个元素
    },
  },

sort和reverse

sort();排序默认从小到大

reverse();翻转

  methods: {
    changeList:function(){
      this.list.sort();
      this.list.reverse();
    },
  },

标签:xxx,return,--,元素,list,item,Vue,key
From: https://www.cnblogs.com/TimothyWen/p/16971834.html

相关文章

  • python保存视频中的每一帧
    importcv2importosdefsave_img():video_path=r'./dataset/sample/video'videos=os.listdir(video_path)forvideo_nameinvideos:file_name=video_name.sp......
  • ArcObjects SDK开发 014 MapSurround和普通Element
    1、如何获取MapSurround和获取MapFrame类似,如果你已经获取指北针、比例尺等对象,可以通过IGraphicsContainer的FindFrame函数获取。如果没有,则通过IGraphicsContainer循环......
  • java运算符
    运算符基本了解运算符:对字面量或者对变量进行操作的符号表达式:用运算符把字面量或者变量连接起来(符合java语法的句子)就可以称为表达式,不同运算符连接的表达式体现......
  • LightDB内置特性之访问oracle之oracle_fdw介绍
    LightDB发行版内置了直接访问oracle的扩展oracle_fdw。只要lightdb所在服务器安装了oracle客户端/服务器或轻量客户端,并配置环境变量即可使用。如下:exportORACLE_HOME=......
  • lightdb/postgresql高可用之repmgr日常管理及异常排查指南
    在postgresql的高可用架构中,通常会采用流复制机制实现主备,其历史可参考如下。​​edb​​提供了一个性能影响的参考:  从上可知,HA模式大约会下降1......
  • 【Swift底层进阶--018:高阶函数】
    ​​Swift​​​是一门面向协议的语言,开发中我们已经充分享受到面向协议编程的便利,但​​Swift​​​相比​​OC​​还有一个更重要的优势,那就是对函数式编程提供了强大的支......
  • 数据库设计
    数据库设计表关系一对一如:用户和用户详情一对一的关系多用于表的拆分,讲一个实体经常使用的子端但放一张表,不经常使用的子端放另一张表,用于提升查询性能实现方......
  • postgresql FRONTEND、EXEC_BACKEND宏定义的作用
    FONTEND宏主要用于标记某些可能会在libpq客户端使用的场景,虽然他们主要用于服务端。如下:/**Althoughthisheaderfileisnominallybackend-only,certainfrontend*p......
  • powershell简介
    powershell简介PowerShell是一种跨平台的任务自动化解决方案,由命令行shell、脚本语言和配置管理框架组成。PowerShell可以在Windows、Linux和macOS上运行。注释......
  • lightdb enterrpise postgres并行执行及限制
    有几个参数控制并行执行的行为zjh@postgres=#show%parallel%;name|setting|description......