详解Vue.js 响应接口


Posted in Javascript onJuly 04, 2020

Vue 可以添加数据动态响应接口。

例如以下实例,我们通过使用 $watch 属性来实现数据的监听,$watch 必须添加在 Vue 实例之外才能实现正确的响应。

实例中通过点击按钮计数器会加 1。setTimeout 设置 10 秒后计算器的值加上 20 。

<div id = "app">
  <p style = "font-size:25px;">计数器: {{ counter }}</p>
  <button @click = "counter++" style = "font-size:25px;">点我</button>
</div>
<script type = "text/javascript">
var vm = new Vue({
  el: '#app',
  data: {
    counter: 1
  }
});
vm.$watch('counter', function(nval, oval) {
  alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
});
setTimeout(
  function(){
    vm.counter += 20;
  },10000
);
</script>

效果如下:

详解Vue.js 响应接口

Vue 不允许在已经创建的实例上动态添加新的根级响应式属性。

Vue 不能检测到对象属性的添加或删除,最好的方式就是在初始化实例前声明根级响应式属性,哪怕只是一个空值。

如果我们需要在运行过程中实现属性的添加或删除,则可以使用全局 Vue,Vue.set 和 Vue.delete 方法。

Vue.set

Vue.set 方法用于设置对象的属性,它可以解决 Vue 无法检测添加属性的限制,语法格式如下:

Vue.set( target, key, value )

参数说明:

  • target: 可以是对象或数组
  • key : 可以是字符串或数字
  • value: 可以是任何类型
<div id = "app">
  <p style = "font-size:25px;">计数器: {{ products.id }}</p>
  <button @click = "products.id++" style = "font-size:25px;">点我</button>
</div>
<script type = "text/javascript">
var myproduct = {"id":1, name:"book", "price":"20.00"};
var vm = new Vue({
  el: '#app',
  data: {
   products: myproduct
  }
});
vm.products.qty = "1";
console.log(vm);
vm.$watch('products.id', function(nval, oval) {
  alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
});
</script>

在以上实例中,使用以下代码在开始时创建了一个变量 myproduct:

var myproduct = {"id":1, name:"book", "price":"20.00"};

该变量在赋值给了 Vue 实例的 data 对象:

var vm = new Vue({ el: '#app', data: { products: myproduct } });

如果我们想给 myproduct 数组添加一个或多个属性,我们可以在 Vue 实例创建后使用以下代码:

vm.products.qty = "1";

查看控制台输出:

详解Vue.js 响应接口

如上图看到的,在产品中添加了数量属性 qty,但是 get/set 方法只可用于 id,name 和 price 属性,却不能在 qty 属性中使用。

我们不能通过添加 Vue 对象来实现响应。 Vue 主要在开始时创建所有属性。 如果我们要实现这个功能,可以通过 Vue.set 来实现:

<div id = "app">
<p style = "font-size:25px;">计数器: {{ products.id }}</p>
<button @click = "products.id++" style = "font-size:25px;">点我</button>
</div>
<script type = "text/javascript">
var myproduct = {"id":1, name:"book", "price":"20.00"};
var vm = new Vue({
  el: '#app',
  data: {
   products: myproduct
  }
});
Vue.set(myproduct, 'qty', 1);
console.log(vm);
vm.$watch('products.id', function(nval, oval) {
  alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
});
</script>

详解Vue.js 响应接口

从控制台输出的结果可以看出 get/set 方法可用于qty 属性。

Vue.delete

Vue.delete 用于删除动态添加的属性 语法格式:

Vue.delete( target, key )

参数说明:

  • target: 可以是对象或数组
  • key : 可以是字符串或数字
<div id = "app">
  <p style = "font-size:25px;">计数器: {{ products.id }}</p>
  <button @click = "products.id++" style = "font-size:25px;">点我</button>
</div>
<script type = "text/javascript">
var myproduct = {"id":1, name:"book", "price":"20.00"};
var vm = new Vue({
  el: '#app',
  data: {
   products: myproduct
  }
});
Vue.delete(myproduct, 'price');
console.log(vm);
vm.$watch('products.id', function(nval, oval) {
  alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
});
</script>

以上实例中我们使用 Vue.delete 来删除 price 属性。以下是控制台输出结果:

详解Vue.js 响应接口

从上图输出结果中,我们可以看到 price 属性已删除,只剩下了 id 和 name 属性,price 属性的 get/set 方法也已删除。

以上就是详解Vue.js 响应接口的详细内容,更多关于Vue.js 响应接口的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
javascript SocialHistory 检查访问者是否访问过某站点
Aug 02 Javascript
js给onclick赋值传参数的两种方法
Nov 25 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
jQuery实现购物车多物品数量的加减+总价计算
Jun 06 Javascript
jquery实现类似淘宝星星评分功能实例
Sep 12 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
JavaScript中数组去重的5种方法
Jul 04 #Javascript
JS制作简易计算器的实例代码
Jul 04 #Javascript
基于原生js实现九宫格算法代码实例
Jul 03 #Javascript
JavaScript DOM常用操作代码汇总
Jul 03 #Javascript
JavaScript缺少insertAfter解决方案
Jul 03 #Javascript
原生javascript如何实现共享onload事件
Jul 03 #Javascript
Vue如何实现监听组件原生事件
Jul 03 #Javascript
You might like
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
python实现KNN分类算法
2019/10/16 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
公司前台辞职报告
2014/01/19 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
依法行政工作汇报
2014/10/28 职场文书
2015年教师节慰问信
2015/03/23 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python