我需要更新Firebase回调中的Vue属性,如下所示,但它不起作用.这个代码

methods: {
    sign_out : function(e) {
        this.item_count = 0
    }
}

有效,但在promise 回调中设置属性时:

methods: {
  sign_out : function(e) {
  firebase.auth().signOut().then(function() {
      this.item_count = 0
    })
  },

在这种情况下,如何设置属性的值?

推荐答案

回调中的this指向错误的对象.有几种方法可以解决这个问题.

  1. 一次抓捕this人.

    methods: {
      sign_out : function(e) {
        var self = this;
        self.item_count = 0
        firebase.auth().signOut().then(function() {
          self.item_count = 0
      })
    }
    
  2. 使用粗箭.

    methods: {
      sign_out : function(e) {
        this.item_count = 0
        firebase.auth().signOut().then(() => this.item_count = 0)
      }
    }
    
  3. 使用bind().

    methods: {
      sign_out : function(e) {
        this.item_count = 0
        firebase.auth().signOut().then(function() {
          this.item_count = 0
        }.bind(this))
    }
    

胖箭头还不能在所有现代浏览器中使用,所以只有在编译到es5时才使用它们.

Vue.js相关问答推荐

VueUse onClickOutside不支持右键单击

如何 for each 动态创建的按钮/文本字段设置唯一变量?

通过元素加中的正则表达式输入电话号码格式

VueJS CKeditor5 上传图片

Vuetify 复选框:如何停止点击事件?

为什么 Vue 路由/Webpack 开发服务器现在在页面刷新时显示无法获取/路径?

查看 cli3 启用 CORS

Polyfill for ie

等待来自 WDS 的更新信号

Nuxt 打开链接到模态

Vue 3 - 带有全局组件的无法解析组件

是否可以在 vue-devtools 中命名 Vue 实例?

正确的 vueJS 方法将props与数据同步

vue js 中的 process.env.BASE_URL 是什么?

Vue.js 的 $emit 和 $dispatch 有什么区别?

如何让 vuetify 数据表在卡片内时跨越容器的整个宽度?

脚本npm run dev和npm run watch是做什么用的?

如何在 Vuetify DataTable 组件中设置初始每页行数值?

Vue $refs 对象的类型为 unknown未知

根据nuxt中的url参数动态加载组件