详解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实现的距离现在多长时间后的一个格式化的日期
Oct 29 Javascript
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
JQuery+DIV自定义滚动条样式的具体实现
Jun 25 Javascript
jquery图片切换实例分析
Apr 15 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
用JS实现图片轮播效果代码(一)
Jun 26 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
Bootstrap表单布局
Jul 19 Javascript
JS常用加密编码与算法实例总结
Dec 22 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
Feb 04 Javascript
利用Javascript开发一个二维周视图日历
Dec 14 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
Jul 29 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连接mssql的一些相关经验及注意事项
2013/02/05 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
零基础php编程好学吗
2019/10/11 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
法学专业毕业生自荐信范文
2013/12/18 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
优秀食品类广告词
2014/03/19 职场文书
药店促销活动总结
2014/07/10 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
河童之夏观后感
2015/06/11 职场文书
大学运动会加油稿
2015/07/22 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
Java设计模式之代理模式
2022/04/22 Java/Android