【发布时间】:2016-07-06 02:19:02
【问题描述】:
我正在尝试在 Vue.js 中创建一个简单的插件来包装 vue-resource 插件以跟踪请求的状态。
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;
您将看到我从调用 Vue 传递了 ctx 上下文以访问它的 data 值。我已经看到 vue-resource 插件有一种方法可以通过插件自动绑定它,但语法不太正确。
基本上我想避免每次都传递ctx 上下文,它应该已经有了正确的上下文。
编辑
为了澄清,我正在寻找一种解决方案来传递正确的上下文。以上只是一个示例,我不是在寻找跟踪状态的解决方案。
例如在 vue-resource 插件中,如果我们发出任何 http 请求。
this.$http.get('/some/url', {}, function () {
this.func();
console.log(this.var);
});
上下文已经存在于回调中。我不需要做某种var _this = this 来进入视图范围。我想为我的插件实现相同的目标,以便正确的this 就在那里。我试图从vue-resource 插件中找出答案,但很难遵循所有代码。
【问题讨论】:
-
所以你的 Vue 组件上有一个
name属性,并且你希望这个插件随着 HTTP 请求的进行更新该值?我认为这给了你一个糟糕的责任链。您能否创建一个名为status的State属性已更新?那么您可以使用this.$state.status知道当前状态吗?然后插件负责它的用途,组件保持独立
标签: javascript vue.js vue-resource