美文网首页
Vue | 两对cp

Vue | 两对cp

作者: cemcoe | 来源:发表于2020-03-11 21:00 被阅读0次

今天来看两对 cp,之所以把他们当 cp,是因为每次写其中之一时,总是要拿另一个做比较,这种关系在前端很常见。

基本上是看起来好像实现的功能点是一样的,但实际上每个都有其特殊的应用场景。彼此互为补充,缺了谁,都有点不大对劲。

今天来介绍的两对是:

  • methods && computed
  • v-if && v-show

先来看第一对,methods && computed 是创建 Vue 实例时可以选择的字段,和 el, data 是同一类的。

两者的关系有一种既生瑜何生亮的感觉。

在比较之前先看一个 computed 的个人问题。

为何计算属性写的时候是函数,用的时候当成属性【不加小括号】来操作?

假设接下来用到的 data 为:

data: {
    firstName: 'cem',
    lastName: 'coe'
}

现在要在页面中展示完整的名字,可以使用的方式:

  • 双大括号语法 {{firstName + lastName}} 语法过于繁琐
  • methods
  • computed

使用计算属性:

computed: {
    fullName() {
        return this.firstName + this.lastName
    }
}

在 html 中使用时可能是这样的:

<h1>{{fullName}}</h1>

为什么不加小括号呢?它不是函数吗?

这里其实是计算属性的简写,完整的写法:

computed: {
    fullName: {
        set: function() {
        },
        get: function() {
            return this.firstName + this.lastName
        }
    }
}

计算属性本质上就是一个属性,并非函数,只是开发时一般不实现 set 方法。只是简写以后给人一种函数的感觉。

这也就解释了为何计算属性写的时候是函数,用的时候当成属性来操作。

那么接下进入正题,来看一下这对 cp 的异同。


这里做一个对比实验,methods && computed 在页面中均搞 3 次。

<div id="app">
    {{fullName}}
    {{fullName}}
    {{fullName}}
    ---
    {{getFullName()}}
    {{getFullName()}}
    {{getFullName()}}
</div>

为了看到结果在它们身上埋点 console

methods: {
    getFullName() {
        console.log("methods")
        return this.firstName + this.lastName
    }
},
computed: {
    fullName() {
        console.log("computed")
        return this.firstName + this.lastName
    }
}
methods && computed

从结果来看,同样请求三次数据的情况下, methods 执行3次,而 computed 仅仅执行1次。

在 firstName 和 lastName 不改改变时,computed 会使用缓存的结果,效率更高,更加节省资源。

其实两者之中还有一个第三者,唤为 watch,他们之间错综复杂的关系找时间再写。


来看第二对 v-if && v-show,,两者用于条件渲染。

通过一个对比实验来看一看 v-if && v-show 的区别,为了看清结果,给他们埋下 id:

<h1 v-if="isShow" id="if">cemcoe</h1>
<h1 v-show="isShow" id="show">cemcoe</h1>
v-if && v-show

当 isShow 的值被改成 false 时,两个都消失。但他们不一样,通过观察埋下的 id 可以发现:v-if 直接从 DOM 中删掉,v-show 增加了行内样式 display:none,仅仅是视觉不可见。

v-show 更像是一件隐身斗篷。元素仍然存在,只是不可见。

在 CSS 中有类似的问题:display:none 和 visibility:hidden 的异同。又给自己挖了一个坑,有空填。

开发中 v-if 使用较多,向服务器请求数据仅仅加载有权限的内容,如果没有权限就不能将数据添加到 DOM 中。

这里是连载 化学小子的前端实验册 的第 18 篇,欢迎关注。

pixiv|えすない|78926374

图源

相关文章

  • Vue | 两对cp

    今天来看两对 cp,之所以把他们当 cp,是因为每次写其中之一时,总是要拿另一个做比较,这种关系在前端很常见。 基...

  • Vue | 一对基友

    每天一遍提醒自己增强自身抵抗力,多喝热水,注意身体。 介绍完 两对cp 后,今天来看看一对基友的故事。 在 Vue...

  • 新晋CP来袭:鹿晗关晓彤示爱的背后 王志文徐帆破镜重圆

    上周末两对新生cp惹人眼球:鹿晗和关晓彤,王志文和徐帆。前面一对从荧屏cp变成真人cp,后面一对则是从真人cp变成...

  • vue 之 全局注册

    一、全局组件 新建一个组件文件夹,如cp。 组件文件在cp文件夹中新建vue组件文件,如cp.vue 组件入口文件...

  • 开播9年,再上热搜,韩综到底靠什么保鲜?

    周一, “懵钟CP”替代了“周一情侣”上了热搜, 两对CP来自于同个游戏竞技及搞笑节目—— 《runnning m...

  • 谈爱情

    最近对《我们相爱吧》里的两对cp:明道和王鸥,潘玮柏和吴昕很着迷。这两对的女生们的性格绝对可以代表大多数女生在面...

  • 简书的两对cp设计

    对简书两对cp的设计,我选择走二次元路线。简宝玉cp形象比较成熟,没有走完全的古风,因为毕竟他们不是贾宝玉和林黛玉...

  • 王鹤棣究竟有没有订婚?CP粉不要再磕了

    娱乐圈大事不断,如今CP当道,最火的则是王鹤棣和虞书欣,还有吴磊和赵露思,这两对CP代表的是《苍兰诀》和《星汉灿烂...

  • Vue组件data必须是函数

    Vue组件data必须是函数 一、组件data() 函数 定义一个组件 注册组件Vue.component('cp...

  • 星座拟人 这tm是什么国王游戏???(1)

    1.这场国王游戏是为了撮合两对主cp的,是蟹蝎蟹和羯处羯 2.有副cp,请自行寻找 3.一章就一次国王游戏(我错了...

网友评论

      本文标题:Vue | 两对cp

      本文链接:https://www.haomeiwen.com/subject/rhjcjhtx.html