详解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 相关文章推荐
jquery 学习之二 属性相关
Nov 23 Javascript
JQuery 图片的展开和伸缩实例讲解
Apr 18 Javascript
自己写的Javascript计算时间差函数
Oct 28 Javascript
JSONP原理及简单实现
Jun 08 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
vue修改Element的el-table样式的4种方法
Sep 17 Javascript
基于JavaScript实现轮播图效果
Jan 02 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的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
asp批量修改记录的代码
2008/06/25 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
js闭包学习心得总结
2018/04/17 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
python的Jenkins接口调用方式
2020/05/12 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
大学军训自我鉴定
2013/12/15 职场文书
合作协议书
2014/04/23 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
红色经典电影观后感
2015/06/18 职场文书