Vue.jsに単純なプラグインを作成して、vue-resource
プラグインをラップしてリクエストの状態を追跡しようとしています。プラグインのVue.jsバインディングコンテキスト?
function State() {}
State.prototype.post = function (ctx, name, url, data, successCB, errorCB) {
var options = {};
if (errorCB) {
options.error = function (resp) {
ctx[name] = 'error';
return errorCB(resp);
};
}
ctx[name] = 'sending';
ctx.$http.post(url, data, function (res, code, req) {
ctx[name] = 'sent';
return successCB(res, code, req);
}, options);
};
function install(Vue) {
Object.defineProperties(Vue.prototype, {
$state: {
get: function() {
return new State;
// return Vue.state.bind({$vm: this});
}
}
});
}
module.exports = install;
あなたは、私はそれがdata
値ですへのアクセスを取得するために呼び出すヴューからctx
コンテキストを渡す表示されます。私はvue-resource
プラグインでは、プラグインを介してこれを自動的にバインドする方法があることを見てきましたが、バットは構文を正しく取得できません。
基本的には、毎回ctx
のコンテキストを渡す必要はなく、ちょうど適切なコンテキストがあるはずです。
EDIT
私は適切なコンテキストを渡すための解決策を探しています明確にする。上記のちょうど一種の一例であり、私は状態を追跡するための解決策を探していませんよ。
たとえば、vue-resource
プラグインでは、httpリクエストを行う場合です。
this.$http.get('/some/url', {}, function() {
this.func();
console.log(this.var);
});
コンテキストがコールバックですでに存在しています。私はビューのスコープに入るために何らかの種類のvar _this = this
をする必要はありません。私はプラグインのために同じを達成したいので、適切なthis
がそこにあるようにしてください。私はvue-resource
プラグインからそれを理解しようとしていますが、すべてのコードに従うのは苦労しています。
Vueコンポーネントに 'name'プロパティがあり、HTTPリクエストが進行するにつれてこのプラグインがその値を更新しますか?私はそれがあなたに悪い責任を与えると思います。更新された '状態'と呼ばれる '状態'のプロパティを作ることができますか?それで 'this。$ state.status'を使って現在の状態を知ることができましたか?プラグインがその目的を担当していて、コンポーネントは独立しています。 – Jeff