详解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代码超级推荐
Apr 05 Javascript
js 页面输出值
Nov 30 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
简单分析javascript面向对象与原型
May 21 Javascript
JavaScript面对国际化编程时的一些建议
Jun 24 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
Vue2.2.0+新特性整理及注意事项
Aug 22 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
Vue.js中的组件系统
May 30 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 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轻松实现中英文混排字符串截取
2014/05/28 PHP
Java中final关键字详解
2015/08/10 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
angular.bind使用心得
2015/10/26 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
整理Python中的赋值运算符
2015/05/13 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
python打印异常信息的两种实现方式
2019/12/24 Python
python如何提升爬虫效率
2020/09/27 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
行政人员岗位职责
2013/12/08 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
家属联谊会致辞
2015/07/31 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis