角度“this”符号和来自服务的数据,带有承诺
Angular "this" notation and data from service with a promise
所以让我们切入案例。 我有以下服务:
feedBackModule.factory("feedbackSkillService", function ($q, $filter, Query) {
var skills = [];
return {
getSkills: function () {
var d = $q.defer();
if (skills.length <= 0) {
Query.api2({
method: 'GET',
route: 'feedback/skill'
}).then(function (result) {
skills = result;
d.resolve(result);
});
}
else {
d.resolve(skills);
}
return d.promise;
},
putSkill: function (skill) {
skills.push(skill);
},
deleteSkill: function (skill) {
var index = skills.indexOf(skill);
Query.api2({
method: 'DELETE',
route: 'feedback/skill',
params: {id: skill.id}
});
skills.splice(index, 1);
},
editSkill: function (skill) {
Query.api2({
method: 'PUT',
route: 'feedback/skill',
params: {id: skill.id},
data: {skill: skill}
});
}
}
});
以及以下controller
:
feedBackModule.controller('createCollectionController', ['Query', '$modalInstance', 'feedbackSkillService', 'feedbackCollectionService', function (Query, $modalInstance, feedbackSkillService, feedbackCollectionService) {
this.collection = {};
this.skills = [];
feedbackSkillService.getSkills().then(function (result) {
this.skills = result;
});
this.createSkill = function () {
Query.api2({
method: 'POST',
route: 'feedback/skill',
data: {skill: this.skill}
}).then(function (result) {
feedbackSkillService.putSkill(result);
});
$modalInstance.dismiss('cancel');
};
this.cancel = function () {
$modalInstance.dismiss('cancel');
};
}]);
如您所见,我正在尝试从feedbackSkillService
中获取技能
但是,由于这在返回后使用承诺,因此this.skill
超出了范围,这意味着我无法访问它并正确设置它。我知道你可以用$scope
做到这一点,但我不想使用$scope
.
那么如何确保我可以访问该变量呢?
feedbackSkillService.getSkills().then(function (result) {
this.skills = result;
}.bind(this));
// ^^^^^^^^
你只需要确保回调中的this
仍然引用你期望的this
;这里最简单的方法是bind
回调函数的上下文。
请注意,您可能仍存在异步计时问题,并且在您调用this.createSkill
时,result
可能尚未返回。
相关文章:
- $http中的Angular 1数据绑定承诺不起作用
- 如何在状态输入ui路由器时立即显示模板,然后当承诺被解决时显示数据
- 承诺和上传数据
- 访问 angularjs 工厂数据之外的承诺
- AngularFire $createUser 的承诺不返回包含用户数据的对象
- 在承诺函数从 pouchdb 填充数据之前触发 Ionic/Angular $watch的问题
- 如何在 ajax 请求中使用承诺对强制数据
- 在AngularUI路由器中访问多个承诺数据
- Angular JS承诺,JSON数据和有趣的时间
- 这是一种常见的模式吗?(返回数据而不是返回承诺)
- 通过承诺$q angularjs接收不完整的数据
- 从 Parse 承诺链返回数据
- 对没有返回数据的函数的承诺
- 角度“this”符号和来自服务的数据,带有承诺
- 蓝鸟承诺不会收到任何数据
- 角度承诺:如果可用,从缓冲区获取数据
- 刷新从承诺返回$http数据
- 在解决承诺 AngularJS/ES6 后检索存储在服务中的数据
- Angular 没有从 FS.readFile 获取带有承诺的数据
- 从承诺外部访问数据