详解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 相关文章推荐
常规表格多表头查询示例
Feb 21 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
Oct 06 Javascript
JQuery异步提交表单与文件上传功能示例
Jan 12 Javascript
Vue组件开发初探
Feb 14 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
Sep 06 Javascript
JS浮点数运算结果不精确的Bug解决
Aug 01 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 Javascript
jquery css实现流程进度条
Mar 26 jQuery
vue2.x数组劫持原理的实现
Apr 19 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
生成php程序的php代码
2008/04/07 PHP
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
php实现的顺序线性表示例
2019/05/04 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
python爬取网站数据保存使用的方法
2013/11/20 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
英国袜子店:Sock Shop
2017/01/11 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
Ajax的工作原理
2015/12/04 面试题
就业推荐自我鉴定
2013/10/06 职场文书
工作会议方案
2014/05/21 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
保研导师推荐信
2015/03/25 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书