2016-03-23 86 views
15

我有下面的代碼:從方法訪問數據的Vue方式是什麼?

data: function() { 
     return { 
     questions: [], 
     sendButtonDisable : false 
     } 

     }, 

     methods: 
     { 
     postQuestionsContent : function() 
     { 
      var that = this; 
      that.sendButtonDisable = true; 
     } 
     } 

我需要後postQuestionsContent改期sendButtonDisable爲true。我發現只有一種方法可以使用var that = this;。有沒有更好的解決方案?

+0

這應該沒有'var this = that'(實際上,你在示例中顯示它的方式沒有意義,你可以忽略它)。 'methods:'對象中的函數將被綁定到當前實例。我假設你已經在你的例子中留下了一些東西 - 你是否正在做任何AJAX調用,並嘗試改變回調內的值或什麼? –

+0

在我的情況下,我將我的方法附加到按鈕上的事件偵聽器。我不明白vuejs做了什麼。 –

回答

15

這取決於你如何調用你的postQuestionsContent方法(如果你異步調用它,你可能需要bindthis上下文)。

在大多數情況下,你應該能夠使用this.$data.YOURPROPNAME訪問它,你的情況this.$data.sendButtonDisable

data: function() { 
    return { 
    questions: [], 
    sendButtonDisable : false 
    } 

    }, 

    methods: 
    { 
    postQuestionsContent : function() 
    { 
     this.$data.sendButtonDisable = true; 
    } 
    } 
+0

部分原因導致無法使用。我認爲社區應該審查這個問題。 –

+0

嗨@TheOracle的問題和意見在vue 0.x版本的領域是有效的。 2.x應該正常工作,不需要$ data。 – nils

2

裏面方法,如果你沒有內部定義的另一範圍,就可以像訪問您的數據:

this.sendButtonDisable = true; 

但如果你有那麼函數在VUE是一個變量稱爲虛擬機的使用COMON(代表視圖模型)在函數的開始,然後鞠內範圍ST使用它無處不在,如:

vm.sendButtonDisable = false; 

完整的例子:

data: function() { 
    return { 
    questions: [], 
    sendButtonDisable : false 
    } 
}, 

methods: { 
    postQuestionsContent : function() { 
    // This works here. 
    this.sendButtonDisable = true; 

    // The view model. 
    var vm = this; 

    setTimeout(() => { 
     // This does not work, you need a the outside context view model. 
     //this.sendButtonDisable = true; 

     // This works, since wm refers to your view model. 
     vm.sendButtonDisable = true; 
    }, 1000); 
    } 
} 
1

試試這個

... 
methods: 
{ 
    postQuestionsContent() 
    { 
     this.sendButtonDisable = true; 
    } 
} 

註冊以上述方式你的方法應該可以解決這個問題。

相關問題