一、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. jQuery+bootstrap实现有省略号的数据分页

    1.前言 在前端通过ajax请求数据后,可以通过bootstrap实现分页.由于bootstrap只提供分页的按钮的样式.数据分页我们需要实现页码跳转,上一页下一页,数据过多显示省略号,点击省略号能快 ...

  2. Java安全之动态加载字节码

    Java字节码 简单说,Java字节码就是.class后缀的文件,里面存放Java虚拟机执行的指令. 由于Java是一门跨平台的编译型语言,所以可以适用于不同平台,不同CPU的计算机,开发者只需要将自 ...

  3. Docker | 专栏文章整理🎉🎉

    Docker Docker系列文章基本已经更新完毕,这是我从去年的学习笔记中整理出来的. 笔记稍微有点杂乱.随意,把它们整理成文章花费了不少力气.整理的过程也是我的一个再次学习的过程,同时也是为了方便 ...

  4. SQLSever视图和存储过程

    一.视图(View) 1. 为什么要学习视图? 在没有视图之前,我们都是写各种各样的SQL语句,有点,非常灵活.后面我们学习应用程序开发的时候,通过C#发送过来的SQL语句 到达数据库的时候,会执行什 ...

  5. 链表实现-回文palindrome判断

    1.数字回文判断(逆转,分离未位,砍掉个位,保存原来) s = s * 10 + a%10 a = a/10 2.字符串判断回文 package main //思路: 开发一个栈来来存放链表的上半段f ...

  6. 让 Serverless 更普惠,阿里云函数计算 FC 宣布全面降价,最大幅度达 37.5%

    11月5日,2022 杭州 · 云栖大会上,阿里云宣布函数计算 FC 开启全面降价,vCPU 单价降幅** 11%,其他的各个独立计费项最高降幅达 37.5%**. 本次云栖大会上,阿里云智能总裁张建 ...

  7. Kubernetes 1.25.4数据平面自带nginx负载均衡实现高可用

    1.环境准备 要点: 1.使用一个FQDN统一作为API Server的接入点: 2.加入集群之前,每个节点都将该FQDN解析至第一个Master: 3.加入集群之后,每个Master节点将该FQDN ...

  8. Oracle 两字符串相似度比较

    select SYS.UTL_MATCH.edit_distance_similarity('为中华之举起而读书','为中华') from dual;

  9. Windows 下 OpenSSH 安装使用

    OpenSSH 是安全 Shell (SSH) 工具的开放源代码版本,Linux 及其他非 Windows 系统的管理员使用此类工具跨平台管理远程系统. OpenSSH 在 2018 年秋季已添加至 ...

  10. 【中间件】K8S-kubernetes

    一.概念 1.为什么使用k8s 生产型应用会涉及多个容器.这些容器必须跨多个服务器主机进行部署 可以构建跨多个容器的应用服务.跨集群调度.扩展这些容器,并长期持续管理这些容器的健康状况 在Docker ...