Vue中用的比较多的几个API

更新日期: 2020-09-10 阅读: 2.2k 标签: api

1. 数据vue.set 和 Vue.delete

在Vue2.x中,当一个Vue实例创建好了以后,如果想要后续给该实例的某一个data添加属性,该属性是不会触发视图更新的,解决方法是使用Vue.set或者vm.$set方法添加指定属性。

例如

<template>
  <div>
      <p>foo.a is {{foo.a}}</p>
      <p>foo.b is {{foo.b}}</p>
      <button @click="foo.a = 111">change a to 111</button>
      <button @click="foo.b = 111">change b to 111</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      foo: { a: 123 }
    }
  },
  created() {
    //在Vue实例创建成功,但是还未挂载到dom树之前给foo增加b属性。
    this.foo.b = 456;
  }
}
</script> 

以上代码在Vue实例创建成功,但是还未挂载到dom树之前给foo增加b属性,此时再页面上可以正常看到foo.a,但是点击修改foo.b页面并不会发生变化。

正确的写法

created() {
  this.$set(this.foo, 'b', 456);
  //或者
  Vue.set(this.foo, 'b', 123);
  
  //对于数组,第二个参数是下表
}

同样的,想要删除一个属性并触发视图更新,并不能直接使用delete,而要用Vue.delete(target, propertyName/index)或者vm.$delete(target, propertyName/index)。

但是,目前在Vue3中,直接使用**this.foo.b = 456**也一样可以触发视图更新,也可以直接使用delete删除属性。


2. 事件:vm.onemit onceoff

vm.$emit和vm.$on是基于发布订阅模式的,常用在子组件向父组件派发事件的时候使用,在子组件上使用@xxx="callback"指令即可,但是除了这种方法,也可以直接在子组件中使用vm.$on也可以触发vm.$emit派发的事件,需要注意的是在哪个组件派发就应该在哪个组件订阅,即事件的派发者既是事件的订阅者。

vm.$emit('test', 'hello'); //派发事件
vm.$on('test', (msg) => {  //订阅事件
  console.log(msg);
}) 

基于这两个api,可以实现一个简单的跨组件通信的方法:事件总线,原理是在Vue的原型上添加一个Vue实例,之后所有组件都可以通过这个Vue实例进行发布消息和订阅消息。

Vue.prototype.$bus = new Vue();

const vm1 = new Vue({...});
const vm2 = new Vue({...});

vm1.$bus.$emit('test', 'hello'); //vm1派发事件
vm2.$bus.$on('test', (msg) => {  //vm2订阅事件
  console.log(msg);
})

vm.$once和vm.$on差不多,区别在于前者在监听到一次事件后就会将该事件移除。

vm.$off用于移除事件监听器

如果没有提供参数,则移除所有监听器。
如果提供了事件的名称,则移除该事件所有的监听器。
如果提供了事件名称与回调引用,则移除这个回调的监听器。

vm.$off(); //移除所有的事件监听器
vm.$off('test'); //移除该事件所有的监听器
vm.$off('test', callback); //只移除这个回调的监听器

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/9839

相关推荐

适合写api接口文档的管理工具有哪些?

现在越来越流行前后端分离开发,使用ajax交互。所以api接口文档就变的十分有意义了,目前市场有哪些比较优秀的接口文档管理工具呢?比如:MinDoc,eoLinker,apizza,RAML,Swagger等等

前后端分离,如何防止api接口被恶意调用或攻击

无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了。目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提供便利的同时,也成了呗恶意攻击的对象,那么如何才能防止被恶意调用呢?

超赞的腾讯短网址(微信url.cn短链接)生成api接口

腾讯短网址的应用场景很广,譬如短信营销、邮件推广、微信营销、QQ营销、自媒体推广、渠道推广等,都会用到短网址。究其原因是在于短网址可以降低推广成本、用户记忆成本,提高用户点击率;在特定的场景下推广还能规避关键词,防止域名被拦截

JSON API免费接口_ 免费的天气预报、地图、IP、手机信息查询、翻译、新闻等api接口

整理提供最新的各种免费JSON接口,其中有部分需要用JSONP调用。方面前端同学的学习或在网站中的使用,包括:免费的天气预报、地图、IP、手机信息查询、翻译、新闻等api接口

ACE Editor在线代码编辑器的API使用文档

ACE 是一个开源的、独立的、基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScript应用程序中。ACE支持超过60种语言语法高亮,并能够处理代码多达400万行的大型文档

浏览器中的图像识别 API

在 Native 开发中,Android 和 IOS 平台都在系统层面直接提供给了应用开发识别图像的一些能力,比如对于二维码/条形码的识别,Android 可以使用 barcode API 、 iOS 可以使用 CIQRCodeFeature API 。

Vue 3.0 体验 Vue Function API

近 Vue 官方公布了 Vue 3.0 最重要的RFC:Function-based component API,并发布了兼容 Vue 2.0 版本的 plugin:vue-function-api,可用于提前体验 Vue 3.0 版本的 Function-based component API

vue-next 函数式 api

在分享 vue-next 各个子模块的实现之前,我觉的有必要比较全面的整理下 vue-next 中提出的函数式 api,了解这些的话,无论是对于源码的阅读,还是当正式版发布时开始学习,应该都会有起到一定的辅助作用

在原生 React Native 应用中使用 Expo API

你可以在任何 React Native 应用程序中使用尽可能少或尽可能多的 Expo SDK。 我们已经花了很多时间构建和维护这些包含原生应用特性的跨平台 API,我们很高兴最终实现了向整个 React Native 生态共享这些 API

构建API的最佳编程语言是什么?

你是否正在设计第一个Web应用程序?也许你过去已经建立了一些,但是目前也正在寻找语言的变化以提高你的技能,或尝试新的东西。有了所有信息,就很难决定为下一个产品或项目选择哪种编程语言。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!