详解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注入技巧
Jun 22 Javascript
IE/FireFox具备兼容性的拖动代码
Aug 13 Javascript
JavaScript高级程序设计 客户端存储学习笔记
Sep 10 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
React diff算法的实现示例
Apr 20 Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 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守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
php的socket编程详解
2016/11/20 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
php读取本地json文件的实例
2018/03/07 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
PHP 8新特性简介
2020/08/18 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
python sorted方法和列表使用解析
2019/11/18 Python
Python tkinter和exe打包的方法
2020/02/05 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
中级会计职业生涯规划范文
2014/01/16 职场文书
高二生物教学反思
2014/01/27 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
保研推荐信格式
2015/03/25 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python