2017-03-04 54 views
1

我需要在火力地堡回调如下更新VUE的财产,但它不工作,相同的更新代码如何更新承诺回调中的vue属性?

this.item_count = 0 

作品VUE方法中,而不是在一个承诺回调:

methods: { 
    sign_out : function(e) { 
    this.item_count = 0 
    firebase.auth().signOut().then(function() { 
     // this.item_count = 0 // this will not set the item_count of Vue instance   
    }) 
    }, 
+0

[使用 “本” 在Vuejs 2.0(http://stackoverflow.com/questions/41820258/using-this-in-vuejs-2-的可能的复制0) – Saurabh

回答

6

您的回调中的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使用它们。

1

一种方法是在回调之外对此进行引用。使用回调中的引用来访问预期对象上的引用。

所以你可以试试:

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