質問編集履歴

1

解決方法を記入

2017/10/12 01:38

投稿

SystemAjisai
SystemAjisai

スコア171

test CHANGED
File without changes
test CHANGED
@@ -179,3 +179,113 @@
179
179
  ###補足情報(言語/FW/ツール等のバージョンなど)
180
180
 
181
181
  Vue.js 2.2.4
182
+
183
+
184
+
185
+
186
+
187
+ ###追記:解決しました
188
+
189
+ mio-cさんの回答から、もう1回音声入力の結果をVueで受け取る方法を考え直してみてうまく実装することができました!
190
+
191
+ 質問のタイトルとは方法になるので、解決方法を記載しておきます。
192
+
193
+
194
+
195
+
196
+
197
+ ```javascript
198
+
199
+ window.SpeechRecognition = window.SpeechRecognition || webkitSpeechRecognition;
200
+
201
+ // ↓音声入力APIのインスタンスを入れる変数
202
+
203
+ var rec = null;
204
+
205
+
206
+
207
+ //コードが変わったときの処理はVueの外に出す↓
208
+
209
+ var codeChange = function(val, setId, url){
210
+
211
+ if(val==""){
212
+
213
+ $("#"+setId).val("");
214
+
215
+ return;
216
+
217
+ }
218
+
219
+ var json = ajax_json(url, val);
220
+
221
+ json.done(function(data){
222
+
223
+ if(data == null){
224
+
225
+ $("#"+setId).val("");
226
+
227
+ return;
228
+
229
+ }
230
+
231
+ $("#"+setId).val(data["名称"]);
232
+
233
+ });
234
+
235
+ ```
236
+
237
+
238
+
239
+ コンポーネントのテンプレートの中に、マイクを起動するリンクも入れてしまってクリックした時の処理をコンポーネントのmethodsの中に移動させました。
240
+
241
+ ```javascript
242
+
243
+ methods:{
244
+
245
+ onChange: function(){
246
+
247
+ var val = this.$refs.codesearch.value;
248
+
249
+ codeChange (val, this.nameId, this.url);
250
+
251
+ },
252
+
253
+ onMicStart: function(){
254
+
255
+ var setId = this.nameId;
256
+
257
+ var url = this.url;
258
+
259
+ if(rec === null){
260
+
261
+ // 音声入力のAPI
262
+
263
+ rec = new webkitSpeechRecognition();
264
+
265
+ :
266
+
267
+ :
268
+
269
+ }
270
+
271
+ // 音声入力が終わったときの処理はonresultに入れる
272
+
273
+ // Vueの中でセットしてもちゃんと動いた
274
+
275
+ rec.onresult = function(event){
276
+
277
+ var val = event.results[0][0].transcript;
278
+
279
+ codeChange (val, setId, url);
280
+
281
+ }
282
+
283
+ rec.start();
284
+
285
+ }
286
+
287
+ ```
288
+
289
+ やってみれば単純だったのですが、既存の処理をそのまま使おうとしすぎて思いつきませんでした。。。
290
+
291
+ ありがとうございました!!