详解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 相关文章推荐
JS面向对象编程之对象使用分析
Aug 19 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
浅谈JavaScript数据类型
Mar 03 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
JavaScript中removeChild 方法开发示例代码
Aug 15 Javascript
vue.js实现仿原生ios时间选择组件实例代码
Dec 21 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
vue-router实现webApp切换页面动画效果代码
May 25 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
微信小程序云开发之使用云函数
May 17 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
php cout&amp;lt;&amp;lt;的一点看法
2010/01/24 PHP
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python中文件操作简明介绍
2015/04/13 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python实现大学人员管理系统
2019/10/25 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
数据管理员的自我评价分享
2013/11/15 职场文书
大学生村官事迹材料
2014/01/21 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
降消项目实施方案
2014/03/30 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
捐资助学倡议书
2014/04/15 职场文书
中学生励志演讲稿
2014/04/26 职场文书
在校实习生求职信
2014/06/18 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
企业宣传语大全
2015/07/13 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python