2017-01-24 48 views
1

我是VueJS中的新人。 我有一个小问题,我无法弄清楚。希望有人能给我一个提示。在Vuejs 2.0中使用“this”

我正在创建一个语音搜索按钮,基本上当我单击语音按钮时,它会记录我的语音并将其输出到输入属性中。

<input type="text" name="inputSearch" id="inputSearch" 
v-model="inputSearch" class="form-control" x-webkit-speech> 

这是我在VueJS

<script> 
export default { 
     data() { 
      return { 
        inputSearch: '', 
        show: false 
       } 
     }, 
     methods: { 
      voiceSearch: function(event){ 
        this.inputSearch = ''; 
        this.show = false; 
        if (window.hasOwnProperty('webkitSpeechRecognition')) { 
        var recognition    = new webkitSpeechRecognition(); 
        recognition.continuous  = false; 
        recognition.interimResults = false; 
        recognition.lang   = "en-US"; 
        recognition.start(); 
        recognition.onresult = function(e) { 
        this.inputSearch = e.results[0][0].transcript; 
        recognition.stop(); 
         }; 
        recognition.onerror = function(e) { 
          alert('There are something wrong...'); 
          recognition.stop(); 
        }; 



        }else { 
         alert('Your browser does not support HTML5/WebKitSpeech. You are not able to use this functionality'); 
        } 

      } 

     } 
    } 
</script> 

脚本我能够得到的声音recoginization的文本,但在输入形式不能表现出来。

感谢,

回答

3

而不是使用ES6,这使这个完整的范围内,这样的function使用箭头语法:

   recognition.onresult = (e) => { 
        this.inputSearch = e.results[0][0].transcript; 
        recognition.stop(); 
       }; 
       recognition.onerror = function(e) { 
         alert('There are something wrong...'); 
         recognition.stop(); 
       }; 

或另一种选择是保存this在其他一些变量和使用该变量如下:

   var that = this 
       recognition.onresult = function(e) { 
        that.inputSearch = e.results[0][0].transcript; 
        recognition.stop(); 
       }; 
       recognition.onerror = function(e) { 
         alert('There are something wrong...'); 
         recognition.stop(); 
       }; 

你可以看看我的相似答案here

+0

完美地工作!谢谢 – trinhdh