当前位置: 首页 > news >正文

做网站哪家公司好2024年4月新冠疫情结束了吗

做网站哪家公司好,2024年4月新冠疫情结束了吗,佛山厂家关键词网络推广,2017自己做网站的趋势文章目录 计算属性 computedcomputed 的使用方法computed 与 method 的区别计算属性完整写法 watch 侦听器(监视器)简单写法 → 简单类型数据,直接监视完整写法 → 添加额外配置项 计算属性 computed computed 的使用方法 **概念&#xff1…

文章目录

  • 计算属性 computed
    • computed 的使用方法
    • computed 与 method 的区别
    • 计算属性完整写法
  • watch 侦听器(监视器)
    • 简单写法 → 简单类型数据,直接监视
    • 完整写法 → 添加额外配置项

计算属性 computed

computed 的使用方法

**概念:**基于现有的数据,计算出来的新属性。 依赖的数据变化,自动重新计算。

语法:

  • ① 声明在 computed 配置项中,一个计算属性对应一个函数

  • ② 使用起来和普通属性一样使用 {{ 计算属性名 }}

computed: {计算属性名 () {基于现有数据,编写求值逻辑return 结果}
},

计算属性 → 可以将一段 求值的代码 进行封装

示例:

​ 要求:

通过计算属性来求得获得的礼物的总数

在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table {border: 1px solid #000;text-align: center;width: 240px;}th,td {border: 1px solid #000;}h3 {position: relative;}</style>
</head><body><div id="app"><h3>小黑的礼物清单</h3><table><tr><th>名字</th><th>数量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}</td></tr></table><!-- 目标:统计求和,求得礼物总数 --><p>礼物总数:{{getSum}}</p></div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 现有的数据list: [{ id: 1, name: '篮球', num: 1 },{ id: 2, name: '玩具', num: 2 },{ id: 3, name: '铅笔', num: 5 },]},computed: {getSum() {return this.list.reduce((sum, item) => {return sum + item.num}, 0)}}})</script>
</body></html>

computed 与 method 的区别

computed 计算属性:

**作用:**封装了一段对于数据的处理,求得一个结果。

语法:

  • ① 写在 computed 配置项中

  • ② 作为属性,直接使用 → this.计算属性 {{ 计算属性 }}

methods 方法:

**作用:**给实例提供一个方法,调用以处理业务逻辑。

语法:

  • ① 写在 methods 配置项中

  • ② 作为方法,需要调用 → this.方法名( ) {{ 方法名() }} @事件名=“方法名”

二者的区别

缓存特性(提升性能):

  1. 计算属性会对计算出来的结果缓存,再次使用直接读取缓存,依赖项变化了,会自动重新计算 → 并再次缓存

  2. 而方法却是每次获取值的时候都会重新计算

示例:

使用 computed 方法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table {border: 1px solid #000;text-align: center;width: 300px;}th,td {border: 1px solid #000;}h3 {position: relative;}span {position: absolute;left: 145px;top: -4px;width: 16px;height: 16px;color: white;font-size: 12px;text-align: center;border-radius: 50%;background-color: #e63f32;}</style>
</head><body><div id="app"><h3>小黑的礼物清单🛒<span>?</span></h3><table><tr><th>名字</th><th>数量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}</td></tr></table><p>礼物总数:{{ totalCount }}</p><p>礼物总数:{{ totalCount }}</p><p>礼物总数:{{ totalCount }}</p></div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 现有的数据list: [{ id: 1, name: '篮球', num: 3 },{ id: 2, name: '玩具', num: 2 },{ id: 3, name: '铅笔', num: 5 },]},methods: {f_totalCount() {let total = this.list.reduce((sum, item) => sum + item.num, 0)console.log('methods方式获取值被触发了1次');return total}},computed: {totalCount() {let total = this.list.reduce((sum, item) => sum + item.num, 0)console.log('computed方式获取值被触发了1次');return total}},})</script>
</body></html>

在这里插入图片描述

使用 methods 方法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table {border: 1px solid #000;text-align: center;width: 300px;}th,td {border: 1px solid #000;}h3 {position: relative;}span {position: absolute;left: 145px;top: -4px;width: 16px;height: 16px;color: white;font-size: 12px;text-align: center;border-radius: 50%;background-color: #e63f32;}</style>
</head><body><div id="app"><h3>小黑的礼物清单🛒<span>?</span></h3><table><tr><th>名字</th><th>数量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}</td></tr></table><p>礼物总数:{{ f_totalCount() }}</p><p>礼物总数:{{ f_totalCount() }}</p><p>礼物总数:{{ f_totalCount() }}</p></div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 现有的数据list: [{ id: 1, name: '篮球', num: 3 },{ id: 2, name: '玩具', num: 2 },{ id: 3, name: '铅笔', num: 5 },]},methods: {f_totalCount() {let total = this.list.reduce((sum, item) => sum + item.num, 0)console.log('methods方式获取值被触发了1次');return total}},computed: {totalCount() {let total = this.list.reduce((sum, item) => sum + item.num, 0)console.log('computed方式获取值被触发了1次');return total}},})</script>
</body></html>

在这里插入图片描述

计算属性完整写法

计算属性默认的简写,只能读取访问,不能 “修改”。

如果要 “修改” → 需要写计算属性的完整写法。

在这里插入图片描述

如果修改 computed 的值而其没有 set 函数的话就会报错

在这里插入图片描述

例子:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div id="app">姓:<input type="text" v-model="firstName"><br>名:<input type="text" v-model="lastName"><br><p>姓名:{{fullName}}</p><button @click="changeName">修改姓名</button></div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {firstName: '迪',lastName: '幻'},computed: {fullName: {get() {return this.firstName + this.lastName},set(value) {this.firstName = value.slice(0, 1)this.lastName = value.slice(1)}}},methods: {changeName() {this.fullName = '迪小幻'}}})</script>
</body></html>

**总结:**如果你的计算属性不止想拿来进行读取操作的话,那么加上一个set方法就可以实现数据的读取与改写

watch 侦听器(监视器)

作用:监视数据变化,执行一些 业务逻辑 或 异步操作。

语法:

  • ① 简单写法 → 简单类型数据,直接监视

  • ② 完整写法 → 添加额外配置项

简单写法 → 简单类型数据,直接监视

data: { words: '苹果',obj: {words: '苹果'}
},
watch: {
// 该方法会在数据变化时,触发执行数据属性名 (newValue, oldValue) {一些业务逻辑 或 异步操作。
},'对象.属性名' (newValue, oldValue) {一些业务逻辑 或 异步操作。}
}

示例:

简单数据类型:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-size: 18px;}#app {padding: 10px 20px;}.query {margin: 10px 0;}.box {display: flex;}textarea {width: 300px;height: 160px;font-size: 18px;border: 1px solid #dedede;outline: none;resize: none;padding: 10px;}textarea:hover {border: 1px solid #1589f5;}.transbox {width: 300px;height: 160px;background-color: #f0f0f0;padding: 10px;border: none;}.tip-box {width: 300px;height: 25px;line-height: 25px;display: flex;}.tip-box span {flex: 1;text-align: center;}.query span {font-size: 18px;}.input-wrap {position: relative;}.input-wrap span {position: absolute;right: 15px;bottom: 15px;font-size: 12px;}.input-wrap i {font-size: 20px;font-style: normal;}</style>
</head><body><div id="app"><!-- 条件选择框 --><div class="query"><span>翻译成的语言:</span><select><option value="italy">意大利</option><option value="english">英语</option><option value="german">德语</option></select></div><!-- 翻译框 --><div class="box"><div class="input-wrap"><textarea v-model="words"></textarea><span><i>⌨️</i>文档翻译</span></div><div class="output-wrap"><div class="transbox">mela</div></div></div></div><script src="./vue.js"></script><script src="./axios.js"></script><script>// 接口地址:https://applet-base-api-t.itheima.net/api/translate// 请求方式:get// 请求参数:// (1)words:需要被翻译的文本(必传)// (2)lang: 需要被翻译成的语言(可选)默认值-意大利// -----------------------------------------------const app = new Vue({el: '#app',data: {words: '',// obj: {//   words: ''// }},watch: {words(newVal, oldVal) {console.log('words 的值变化了', 'newVal:' + newVal, 'oldVal:' + oldVal);}}})</script>
</body></html>

复杂数据类型:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-size: 18px;}#app {padding: 10px 20px;}.query {margin: 10px 0;}.box {display: flex;}textarea {width: 300px;height: 160px;font-size: 18px;border: 1px solid #dedede;outline: none;resize: none;padding: 10px;}textarea:hover {border: 1px solid #1589f5;}.transbox {width: 300px;height: 160px;background-color: #f0f0f0;padding: 10px;border: none;}.tip-box {width: 300px;height: 25px;line-height: 25px;display: flex;}.tip-box span {flex: 1;text-align: center;}.query span {font-size: 18px;}.input-wrap {position: relative;}.input-wrap span {position: absolute;right: 15px;bottom: 15px;font-size: 12px;}.input-wrap i {font-size: 20px;font-style: normal;}</style>
</head><body><div id="app"><!-- 条件选择框 --><div class="query"><span>翻译成的语言:</span><select><option value="italy">意大利</option><option value="english">英语</option><option value="german">德语</option></select></div><!-- 翻译框 --><div class="box"><div class="input-wrap"><textarea v-model="obj.words"></textarea><span><i>⌨️</i>文档翻译</span></div><div class="output-wrap"><div class="transbox">mela</div></div></div></div><script src="./vue.js"></script><script src="./axios.js"></script><script>// 接口地址:https://applet-base-api-t.itheima.net/api/translate// 请求方式:get// 请求参数:// (1)words:需要被翻译的文本(必传)// (2)lang: 需要被翻译成的语言(可选)默认值-意大利// -----------------------------------------------const app = new Vue({el: '#app',data: {words: '',obj: {words: ''}},watch: {words(newVal, oldVal) {console.log('words 的值变化了', 'newVal:' + newVal, 'oldVal:' + oldVal);},'obj.words'(newVal, oldVal) {console.log('obj.words 的值变化了', 'newVal:' + newVal, 'oldVal:' + oldVal);}}})</script>
</body></html>

完整写法 → 添加额外配置项

试想一下会有这样一个情景,如果我们重新选择一门语言的话,那翻译的内容也会发生相应的改变,因此,我们就不能仅仅只检测文本框内容是否发生了改变,还应该检测语言的选择是否发生了变化,因此我们就需要侦听器的完整写法来实现这一功能

侦听器完整写法

data: {obj: {words: '苹果',lang: 'italy'},},watch: {// watch 完整写法数据属性名: {deep: true, // 深度监视immediate: true, // 是否立刻执行一次handlerhandler(newValue) {console.log(newValue)}}}
  1. deep: true 对复杂类型深度监视

  2. immediate: true 初始化立刻执行一次handler方法

因此我们改良后可以得到以下的代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-size: 18px;}#app {padding: 10px 20px;}.query {margin: 10px 0;}.box {display: flex;}textarea {width: 300px;height: 160px;font-size: 18px;border: 1px solid #dedede;outline: none;resize: none;padding: 10px;}textarea:hover {border: 1px solid #1589f5;}.transbox {width: 300px;height: 160px;background-color: #f0f0f0;padding: 10px;border: none;}.tip-box {width: 300px;height: 25px;line-height: 25px;display: flex;}.tip-box span {flex: 1;text-align: center;}.query span {font-size: 18px;}.input-wrap {position: relative;}.input-wrap span {position: absolute;right: 15px;bottom: 15px;font-size: 12px;}.input-wrap i {font-size: 20px;font-style: normal;}</style>
</head><body><div id="app"><!-- 条件选择框 --><div class="query"><span>翻译成的语言:</span><select v-model="obj.lang"><option value="italy">意大利</option><option value="english">英语</option><option value="german">德语</option></select></div><!-- 翻译框 --><div class="box"><div class="input-wrap"><textarea v-model="obj.words"></textarea><span><i>⌨️</i>文档翻译</span></div><div class="output-wrap"><div class="transbox">mela</div></div></div></div><script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script><script>// 接口地址:https://applet-base-api-t.itheima.net/api/translate// 请求方式:get// 请求参数:// (1)words:需要被翻译的文本(必传)// (2)lang: 需要被翻译成的语言(可选)默认值-意大利// -----------------------------------------------const app = new Vue({el: '#app',data: {words: '',obj: {words: '迪幻',lang: 'italy'}},watch: {obj: {deep: true,immediate: true,handler(newVal, oldVal) {console.log('被修改了', 'newVal:' + newVal, 'oldVal:' + oldVal);}}}})</script>
</body></html>

cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js">

```

相关文章

  • 本专栏上一章:
    Vue.js - Vue 的安装 以及 常用的 Vue 指令 【0基础向 Vue 基础学习】
http://www.shuangfujiaoyu.com/news/46406.html

相关文章:

  • 做网站和做电脑软件差别大吗宁波外贸网站推广优化
  • 塘厦企业网站推广公司百度账号登录入口官网
  • c 网站开发 vs2012网络营销平台排名
  • 制作网站首先做的工作海南百度总代理
  • 哪个网站财经做的最好关键词优化心得
  • 自己做网站需要什么软件下载做销售记住这十句口诀
  • ae有么有做gif的网站无代码网站开发平台
  • 做网站的前景百度广告运营
  • 汕头市php网站建设seo课程总结怎么写
  • 做国外夏令营的网站网络营销的四大基础理论
  • 东莞常平疫情seo智能优化软件
  • 企业平台网站制作360优化大师app下载
  • 南京网站排名软文推广哪个平台好
  • 电子商务书城网站建设方案关于进一步优化落实疫情防控措施
  • 家乡介绍网页设计短视频搜索优化
  • 中国疫情图片最新无忧seo博客
  • 网站推荐男生正能量2021天机seo
  • wordpress是建站工具 还是语言新网域名注册
  • 焦作建设网站哪家好在线推广
  • 网站开发的语言有什么软件门户网站怎么做
  • 暖通设计网站推荐杭州网站优化流程
  • 影视免费网站模板计算机培训课程
  • wordpress标签样式网站建设优化推广
  • 建设网站好公司哪家好最新网络营销方式
  • 手机做wifi中继上外国网站广州网站设计建设
  • 个人博客网站搭建模板网页设计制作网站教程
  • 做网站哪家最便宜网络营销案例2022
  • 环县网站怎么做外链网盘下载
  • 信誉好的顺德网站建设中央常委成员名单
  • 哪个网站可以做视频百度推广优化师培训