一、watch属性的使用

1.传统方式实现双向数据改变监听事件(姓名拼接案例)

<div id="app">
姓:
<input type="text" value="" @keyup="textChange()" v-model="firstname"/> +
名:
<input type="text" value="" @keyup="textChange()" v-model="lastname"/> =
姓名:
<input type="text" value="" v-model="fullname"/>
</div>
var vm = new Vue({
el: '#app',
data: {
firstname: '',
lastname: '',
fullname: ''
},
methods: {
textChange(){
this.fullname = this.firstname+ this.lastname
}
}
});

来吧展示:

watch:{
'firstname':function () {
console.log('firstname被监听到了') }
}

2.使用watch监听事件改变(姓名拼接案例)

将methods方法除掉,然后改用watch去监听事件的变化

watch:{
//函数中有两个参数,newval和oldval
//newval:最新的值
//oldval:上一次的值
'firstname':function (newval,oldval) {
// console.log('firstname被监听到了')
console.log('新值:'+newval +'-----' +'旧值:'+oldval) }
}



watch方式实现姓名拼接

watch:{
'firstname':function (newval,oldval) {
this.fullname = newval + this.lastname
//或者是
// this.fullname = this.firstname + this.lastname
},
'lastname':function (newval,oldval) {
this.fullname = this.firstname + this.lastname
}
}

3. 使用watch监听url地址的改变

需求:当组件进行切换时,在页面上显示一句话 欢迎进入登录页面 / 注册页面



通过查看知道$router的path对应的就是url跳转的路由地址

所以我们可以通过watch去监听得到url地址

<div id="app">
<router-link to="/login">点击登录</router-link>
<router-link to="/res">点击注册</router-link>
<router-view></router-view>
<!-- 当组件切换时,在页面上显示一句话 欢迎进入 登录页面 / 注册页面-->
<h2>{{msg}}</h2>
</div>
<script>
var login = {
template:'<h2>登录组件</h2>'
}
var res = {
template:'<h2>注册组件</h2>'
} var router = new VueRouter({
routes:[
{path:'/login',component:login},
{path:'/res',component:res}
]
}) var vm = new Vue({
el: '#app',
data: {
//msg:'欢迎访问----'
msg:''
},
created() { // 这个 created 生命周期函数,在页面刚被打开的时候会执行,同时,如果页面被刷新了,也会执行
// console.log('okokok')
const path = this.$route.path
if (path === '/login') {
this.msg = '欢迎进入登录页面'
} else if (path === '/reg') {
this.msg = '欢迎进入注册页面'
}
},
router,
watch: { //watch是一个对象,对象上是一些键值对
// 在 watch 中,可以监听当前 vm 实例上所有的属性变化, 页面的刷新,不会触发 $router.path 的改变事件
'$route.path': function (newval) {
// console.log(newval)
if (newval === '/login') {
this.msg = '欢迎进入登录页面'
} else if (newval === '/reg') {
this.msg = '欢迎进入注册页面'
}
}
}
});
</script>

小结:根据$router的path的不同就能监听url地址的改变

$router属于this,而this就是当前的vm实例,通过访问监听

this当前实例身上的.path属性就能监听到地址的变化

data中的msg也是vm实例身上的,页面可以通过this来获取到,所以可以通过watch来监听path的变化,从而改变data身上的msg通过切换组件的不同展示不同的msg到页面上

二、computed计算属性的基本使用

1.使用computed计算属性实现姓名拼接案例

<script>
var vm = new Vue({
el: '#app',
data: {
firstname: '',
lastname: ''
},
computed: { // 计算属性区域
//只要访问fullname,那么内部就会调用这个方法,return做一个拼接,一引用一次就会调用一次
'fullname': function () {
// 这个 fullname 就是就是计算属性
// 在页面中,使用计算属性的时候,永远把它当作普通的属性来使用
// 只要 计算属性的 function中,所依赖的任何数据发生变化了,则会触发 计算属性的重新求值
// 计算属性的值,如果被第一计算后,没有发生过变化,则会 把 第一次的值,缓存起来,供后续使用,这样能够提高性能
console.log('ok')
return this.firstname + '-' + this.lastname
}
}
});
</script>
</script>

来吧展示:



上述案例存在的一个问题是,fullname只能获取到firstname和lastname的值,并不能给他们赋值,也就是即便删掉fullname文本框中的值,也不会改变firstname和lastname中的值

解决方法 ----> 通过computed计算属性的get和set方法去解决

2. computed计算属性的get和set方法的使用

 computed: { // 计算属性区域
'fullname': {
get() { // get 表示外界要引用 fullname 的值
console.log('调用了fullname的get方法')
return this.firstname + '-' + this.lastname
},
set(val) { // 外界重新为 fullname 赋值了
const parts = val.split('-')
this.firstname = parts[0] || ''
this.lastname = parts[1] || ''
}
}
}

字符串的 split() 方法的使用

小结:

修改前面的firstname和lastname就会调用get()方法,修改后面的fullname就会调用set()方法

页面一刷新就会直接调用get()方法

当修改fullname框中的值才会触发set()方法

来吧展示:

vue学习笔记(八)---- vue中的实例属性(wacth和computed的使用)的更多相关文章

  1. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

  2. vue学习笔记(八)组件校验&通信

    前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ...

  3. 【Vue学习笔记】—— vue的基础语法 { }

    学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...

  4. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  5. Vue学习笔记之Vue组件

    0x00 前言 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例 ...

  6. vue学习笔记:vue的认识与特点与获取

    Vue了解 Vue:读作 view Vue是一个渐进式框架 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...

  7. python学习笔记013——模块中的私有属性

    1 私有属性的使用方式 在python中,没有类似private之类的关键字来声明私有方法或属性.若要声明其私有属性,语法规则为: 属性前加双下划线,属性后不加(双)下划线,如将属性name私有化,则 ...

  8. Vue学习笔记八:v-for,v-if,v-show指令

    目录 v-for指令:遍历 HTML和效果图 v-for讲解 v-if和v-show:创建,删除,显示,隐藏 HTML和效果图 v-if和v-show的原理 v-for指令:遍历 HTML和效果图 有 ...

  9. Vue学习笔记之Nodejs中的NPM使用

    0x00 NPM是什么 简单的说,npm就是JavaScript的包管理工具.类似Java语法中的maven,gradle,python中的pip. 0x01 NPM安装 傻瓜式的安装. 第一步:打开 ...

  10. vue学习笔记—bootstrap+vue用户管理

    vue,读音view,简单易用的前端框架.特点如下: 1.一个mvvm的前端框架,内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2.中国人尤雨溪维护的个人项目,中文资料多,和go ...

随机推荐

  1. HTML躬行记(4)——Web音视频基础

    公司目前的业务会接触比较多的音视频,所以有必要了解一些基本概念. 文章涉及的一些源码已上传至 Github,可随意下载. 一.基础概念 本节音视频的基础概念摘自书籍<FFmpeg入门详解 音视频 ...

  2. 秀++视频算法仓库-厂家对接规约V5

    一.概要 (1)每个算法厂家在秀++云平台上会有一个厂商标识,譬如CS101:算法厂家可能有多个算法引擎,每个引擎有一个标识譬如Q101,引擎可以理解为一个可执行程序,可以同时分析多路算法:每个算法在 ...

  3. SpringCloud(七) - 微信支付

    1.开发文档 微信开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 安全规范:https://pay.weixin.q ...

  4. MySQL该使用哪种CPU架构服务器?

    1. 摘要 近期,阿里云推出基于 ARM 架构的 RDS MySQL 和 RDS PostgreSQL 实例,现处于邀测阶段,阿里云宣传 ARM 架构的亮点是:在价格下降13%的基础上,平均性能 AR ...

  5. 【OpenStack云平台】安装Centos操作系统

    视频教程:https://live.csdn.net/v/236820 1.环境准备 准备实验所需要的环境,需要安装VMware Workstation.使用的系统镜像为CentOS-7.5-x86_ ...

  6. npm 依赖下载报错:主机名/IP与证书的altname不匹配

    npm 依赖下载报错:主机名/IP与证书的altname不匹配: //取消ssl验证 npm set strict-ssl false npm config set registry http://r ...

  7. KVC原理与数据筛选

    作者:宋宏帅 1 前言 在技术论坛中看到一则很有意思的KVC案例: @interface Person : NSObject @property (nonatomic, copy) NSString ...

  8. Windows 10 读取bitlocker加密的硬盘出现参数错误怎么解决?

    我为了数据安全,用windows专业版的bitlocker加密了一个固态硬盘SSD做的移动硬盘(u盘同理),在家里电脑(windows10 家庭版)打开的时候出现了参数错误 即使密码输入正确还是这个错 ...

  9. GitHub上的一个笔记相关小项目

    就是一个笔记屑小项目, C++编写,有想一起开发的私信 AlgorithWeaver/V-note (github.com) 项目名V-note QVQ

  10. Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取

    〇.参考资料 1.hutool介绍 https://blog.csdn.net/abst122/article/details/124091375 2.Spring Boot+Mybatis实现登录注 ...