2017-08-21 8 views
1

私は動的に適切なhttpメソッドを決定し、単一のapi呼び出しを行いたいと思います。ただし、メソッドを呼び出すと例外がスローされます。Vueリソース - 動的にhttpメソッドを決定する

私はこれがvue-resourceバグではなく、何か間違っていると思います。誰にもアドバイスはありますか?おかげ例えば

let method = this.$http.post 

if (this.model.id) { 
    method = this.$http.put 
} 

method(
    this.url, 
    this.model, 
    options 
).then(response => { 
    this.$router.push(this.redirect_to) 
}).catch(response => { 
    console.log(`Error: ${response.statusText}`) 
}) 

はJavaScript TypeErrorがメッセージ "これは関数ではありません"


作品以下のコードが、長い息切れビットでスローされます。

if (this.model.id) { 
    this.$http.put(
     this.url, 
     this.model, 
     options 
    ).then(response => { 
     this.$router.push(this.redirect_to) 
    }).catch(response => { 
     console.log(`Error: ${response.statusText}`) 
    }) 

} else { 
    this.$http.post(
     this.url, 
     this.model, 
     options 
    ).then(response => { 
     this.$router.push(this.redirect_to) 
    }).catch(response => { 
     console.log(`Error: ${response.statusText}`) 
    }) 
} 
+0

'let method = this。$ http.post'このコードはどこですか?方法は? – Bert

+0

'letメソッド=(this.model.id)を試してみてください。 'put': '投稿';これは$ http [メソッド](this.url、this.model、options)... ' – thanksd

+0

はい、コードサンプルは「メソッド」メソッドからのものです。 – pymarco

答えて

2

この関数を現在のコンテキストにバインドする必要があります。

let method = this.model.id ? this.$http.put.bind(this) : this.$http.post.bind(this) 

または、インデクサーアプローチを使用してください。

let method = this.model.id ? 'put' : 'post' 
this.$http[method](...).then(...) 
+0

私はインデクサーのアプローチが好き、素晴らしいです!再度、感謝します!! – pymarco

関連する問題