一、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. 打地鼠(susliks) 方法记录

    [SDOI2011]打地鼠 题目描述 2020.4.29 数据更新. 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其 ...

  2. 一个 MySQL 隐式转换的坑,差点把服务器整崩溃了

    我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 本来是一个平静而美好的下午,其 ...

  3. UBOOT编译--- include/config.h、 include/autoconf.mk、include/autoconf.mk.dep、u-boot.cfg(三)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 概述 本节主要接上一节解析 :include/config.h. include/autoconf.mk ...

  4. python解释器下载与安装指导手册

    python解释器下载与安装指导手册 1.python解释器 1.1下载地址 1 https://www.python.org/ 1.2.python解释器下载 1.3.python解释器主流版本 p ...

  5. 理解MySQL事务

    事务是什么 百度百科是这么定义的: 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元.在关系数据库中,一个事务可以是一条 ...

  6. C++ 之 宏定义

    宏在 C 语言中非常重要,但在 C++ 中却无甚大用,普遍的共识:尽量避免使用宏 C++ 之父 Bjarne 在<C++ Programming Language>中写到 Avoid ma ...

  7. Kubernetes(K8S) 配置管理-ConfigMap 介绍

    作用:存储不加密数据到 etcd,让 Pod 以变量或者 Volume 挂载到容器中 场景:配置文件 创建配置文件 redis.properties redis.host=127.0.0.1 redi ...

  8. Spring03:案例转账功能(事务问题)、动态代理解决、AOP

    今日内容--核心2AOP 完善Account案例 分析案例中的问题 回顾之前讲过的技术--动态代理 动态代理的另一种实现方式 解决案例中的问题 AOP的概念 Spring中的AOP相关术语 Sprin ...

  9. python 之定时任务(schedule)

    import schedule import time def job(): print("定时通报...") # 定义一个叫job的函数,函数的功能是打印'定时通报...' sc ...

  10. STL set容器常用API

    set容器,容器内部将数据自动排序(平衡二叉树),不能插入重复元素.multiset可以插入重复元素.不能修改容器中的值,通过删除值,在插入. #define _CRT_SECURE_NO_WARNI ...