Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 Vue.js 中通过计算属性动态设置属性值

在 Vue.js 中通过计算属性动态设置属性值

作者头像
学院君
发布于 2023-03-03 05:48:02
发布于 2023-03-03 05:48:02
13.8K00
代码可运行
举报
文章被收录于专栏:学院君的专栏学院君的专栏
运行总次数:0
代码可运行

引子

前面我们已经陆续介绍了 Vue.js 框架的常用基本语法,现在,我们可以结合这些语法实现一个小功能:展示一个 Web 框架列表,并支持新增框架。

vue_learning/basic 目录下新建一个 computed.html 保存本篇教程的代码,然后编写上述功能的实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计算属性示例代码</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
    <style>
        .php {
            color: cornflowerblue;
        }
        .javascript {
            color: gold;
        }
        .golang {
            color: aqua;
        }
        .python {
            color: darkgreen;
        }
    </style>
</head>
<body>
    <div id="app">
        <p>Web开发框架:</p>
        <ul>
            <li v-for="framework in frameworks" :class="framework.language">
                {{ framework.name }}
            </li>
        </ul>
        <hr>
        框架:<input v-model="newFramework" name="framework"/>
        语言:
        <select v-model="newLanguage">
            <option v-for="language in languages" v-text="language"></option>
        </select>
        <button @click="addFramework">新增框架</button>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                frameworks: [
                    {'name': 'Laravel', 'language': 'php'},
                    {'name': 'Vue', 'language': 'javascript'},
                    {'name': 'Gin', 'language': 'golang'},
                    {'name': 'Flask', 'language': 'python'},
                ],
                languages: [
                    'php', 'golang', 'javascript', 'python'
                ],
                newFramework: '',
                newLanguage: '',
            },
            methods: {
                addFramework() {
                    this.frameworks.push(
                        {'name': this.newFramework, 'language': this.newLanguage}
                    );
                }
            }
        });
    </script>
</body>
</html>

在上述代码中,我们使用到了前面介绍的数据绑定、列表渲染、事件监听和处理、属性和类名绑定等所有基本语法,在浏览器中预览该页面:

我们可以通过列表下面的输入框和按钮新增框架到列表项:

可以看到,使用 Vue.js 框架的开发效率比传统 JavaScript DOM 编程要高很多(jQuery 也是 DOM 编程,只是封装了很多常用的功能,为不同浏览器的兼容性做了底层适配)。不过,现在的列表项看起来有点乱,各种语言的框架随机分布在列表项中,不便识别,如果我们想要将同一个语言的 Web 框架都聚集在一起,该怎么做?

这可以通过对列表项的 language 字段做排序来实现分组展示。

排序函数

我们可以在 addFramework 函数中追加一段排序函数对 frameworks 数组按照 language 字段进行升序排序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods: {
    addFramework() {
        this.frameworks.push(
            {'name': this.newFramework, 'language': this.newLanguage}
        );
        // 对 frameworks 数组按照 language 字段做升序排序
        this.frameworks.sort((a, b) => {
            if (a.language < b.language) {
                return -1;
            } else if (a.language > b.language) {
                return 1;
            } else {
                return 0;
            }
        });
    }
}

在浏览器刷新页面,添加框架后就可以看到框架列表会重新排序:

不过这种实现有个问题,就是页面一开始渲染的时候,列表项并没有按照 language 排序,为了更优雅的实现这个排序,可以使用 Vue.js 框架提供的计算属性功能。

计算属性

计算属性从字面意义上理解,就是经过计算后的属性,计算属性可以通过函数来定义,函数体中是该属性的计算逻辑,你可以在 HTML 视图中像调用普通属性一样调用计算属性,Vue 在初次访问该计算属性时,通过对应函数体计算属性值并缓存起来,以后每次计算属性依赖的普通属性值发生变更,才会重新计算,所以性能上没有问题。

计算属性定义在 Vue 实例的 computed 属性中,我们将上述排序逻辑通过计算属性 sortedFrameworks 来实现,对应的实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods: {
    addFramework() {
        this.frameworks.push(
            {'name': this.newFramework, 'language': this.newLanguage}
        );
    }
},
computed: {
    // 定义一个计算属性 sortedFrameworks
    sortedFrameworks() {
        return this.frameworks.sort((a, b) => {
            if (a.language < b.language) {
                return -1;
            } else if (a.language > b.language) {
                return 1;
            } else {
                return 0;
            }
    });
    }
}

注意在 sortedFrameworks 计算属性的函数体中,需要通过 return 关键字返回计算后的属性值,这里依赖的普通属性是 frameworks

这样一来,我们就可以在 HTML 列表视图中调用这个计算属性 sortedFrameworks 来渲染 Web 框架了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ul>
    <li v-for="framework in sortedFrameworks" :class="framework.language">
        {{ framework.name }}
    </li>
</ul>

刷新对应的浏览器页面,页面初始化的时候,就会渲染排序后的列表:

新增框架的时候,也会自动对该框架列表重新排序。

好了关于 Vue.js 的基本语法学院君就简单介绍到这里,下篇教程,我们将开启 Vue 组件开发之旅。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客书房 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue 组件注册:基本使用和组件嵌套
除了前面介绍的基本语法之外,Vue.js 还支持通过组件构建复杂的功能模块,组件可以称得上是 Vue.js 的灵魂,是 Vue.js 框架提供的最强大的功能之一。
学院君
2023/03/03
1.8K0
Vue 组件注册:基本使用和组件嵌套
vue入门教程(一)「建议收藏」
Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
全栈程序员站长
2022/09/05
1.3K0
0基础菜鸟学前端之Vue.js
  简介:0基础前端菜鸟,啃了将近半月前端VUE框架,对前端知识有了初步的了解。下面总结一下这段时间的学习心得。 文章结构 前端基础 Vue.js简介 Vue.js常用指令 Vue.js组件 Vue
互联网金融打杂
2018/04/03
4.5K0
0基础菜鸟学前端之Vue.js
(19)打鸡儿教你Vue.js
模板语法 计算属性 Class,Style绑定 条件渲染 列表渲染 事件处理 表单输入绑定
达达前端
2019/07/04
5240
(19)打鸡儿教你Vue.js
【编程鹿】学Vue.js这一篇就够了「万字学会|通俗易懂」上篇
在MVVM之前,开发人员从后端获取需要的数据模型,然后要通过DOM操作Model渲染到View中。而后当用户操作视图,我们还需要通过DOM获取View中的数据,然后同步到Model中。
鹿老师的Java笔记
2020/12/02
12.6K0
【编程鹿】学Vue.js这一篇就够了「万字学会|通俗易懂」上篇
3. Vue语法--计算属性
通常, 我们是在模板中, 通过插值语法显示data的内容, 但有时候我们可能需要在{{}}里添加一些计算, 然后在展示出来数据. 这时我们可以使用到计算属性
用户7798898
2021/02/25
1.1K0
3. Vue语法--计算属性
Vue 模板语法 插值操作 绑定属性 计算属性 事件监听 条件判断 循环遍历 阶段案例
Vue是一个用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设定为能够由底往上,逐层应用。其不仅语法简单,而且易于与其他第三方项目集成。在单页应用程序上仍能提供强大的支持
有勇气的牛排
2023/06/25
2830
第一章 : Vue2 技术精讲
① 对象 → 键就是类名,值是布尔值。如果值为 true,有这个类,否则没有这个类
捞月亮的小北
2023/12/01
2310
第一章 : Vue2 技术精讲
VUE.js高级
首先先更正一下昨天发送内容的错误之处,对你造成的影响深表歉意。对照昨天的文章:ajax和vue.js(此处连接方便大家查看对照)中第6部分vue的事件与函数中,第4行更正为this.属性名或对象名.属性(昨天写成了冒号,此处为手误,特此更正)
小闫同学啊
2019/07/18
4.4K0
VUE.js高级
Vue中 v-for 指令深入解析:原理、实践与性能优化
Vue.js 是一个渐进式 JavaScript 框架,它允许开发者使用声明式方式编写可重用的 UI 组件。在 Vue.js 中,v-for 是一个非常重要的指令,它用于基于一个数组来渲染一个列表。本文将深入探讨 v-for 指令的工作原理,并通过实践来展示如何使用它。
Front_Yue
2024/07/28
7460
Vue中 v-for 指令深入解析:原理、实践与性能优化
Vue.js 计算属性的力量:深入理解计算属性的原理与用法
Vue.js 是一款流行的前端框架,它提供了许多强大的特性来简化前端开发工作。其中之一是计算属性(Computed Properties)。计算属性允许开发人员根据数据的变化生成派生数据,同时在视图中保持响应式。本文将深入探讨Vue.js的计算属性,解释其原理、用法和最佳实践。
啵啵肠
2023/11/16
6110
【一起来烧脑】一步学会Vue.js系统
Vuejs是一个构建数据驱动的web界面的库,通过api实现响应的数据绑定和组合的视图组件,Vue.js的核心是一个响应的数据绑定系统,它让数据与DOM保持同步非常简单,一旦创建了绑定,DOM 将与数据保持同步。
达达前端
2019/07/18
1.3K0
【一起来烧脑】一步学会Vue.js系统
【Vue.js】008-列表渲染
我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名;
訾博ZiBo
2025/01/06
1710
【Vue.js】008-列表渲染
浅谈Vue--直接引入Vue.js实现简单地开发
Vue是一个MVVM的JavaScript框架; ViewModel负责逻辑的实现,把Model里的数据传递给View,实现视图层与数据层的解耦
生南星
2019/07/22
7.8K0
Vue-QuickStarted
概念:指令(Directives)是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。
用户11097514
2024/05/31
1580
Vue-QuickStarted
Vue.js之Vue计算属性、侦听器、样式绑定
1)el(挂载点) 创建一个Vue这个实例去接管页面中的某个Element(元素)。也就是说el表明和页面上 哪一个节点做绑定! 2)data vue实例都有一些数据,我们把数据都存放在data中。
用户1195962
2018/09/13
1.9K0
Vue.js之Vue计算属性、侦听器、样式绑定
Vue计算属性
  表达式的逻辑过于复杂的时候,应当考虑使用计算属性。计算属性是以函数形式,在选项对象的computed选项中定义。我们将字符串翻转的功能用计算属性实现,代码如下:
别团等shy哥发育
2023/02/25
1.1K0
Vue计算属性
Vue.js 详细介绍
Vue.js 是由尤雨溪(Evan You)开发的一款开源 JavaScript 框架。它的设计理念是通过简单易用的 API 和数据绑定机制,让开发者能够高效地构建用户界面。
IT_陈寒
2024/05/24
2640
vue.js-详解三大流行框架VUE_快速进阶前端大咖-Vue基础
MVX模式简介: MVX框架模式:MVC+MVP+MVVM MVC: Model模型+View视图+Controller控制器
达达前端
2019/12/13
4.1K0
vue.js-详解三大流行框架VUE_快速进阶前端大咖-Vue基础
Vue.js-列表渲染 原
我们用v-for指令根据一组数组的选项列表进行渲染,v-for指令需要以item in items形式的特殊语法,items是源数据数组并且item是数组元素迭代的别名 基本用法
tianyawhl
2019/04/04
3K0
相关推荐
Vue 组件注册:基本使用和组件嵌套
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档