У меня есть следующий очень простой html-фрагмент
<div data-ng-repeat="goal in vm.goals">!!!</div>
Тогда в контроллере у меня есть следующее:
//this.goals = dataService.createStaticGoals();
dataService.getCurrentTasks()
.then(function (results: Array<ReadingLog.Models.UserGoal>) {
this.goals = results;
});
Если я раскомментирую первую строку, тогда все работает, и я вижу DIVs, как я ожидаю, но когда я перехожу к методу службы данных, я не вижу никаких div на странице.
Служба данных очень проста прямо сейчас, вы можете увидеть все, что делает тот же метод createStaticGoals, который действительно работал, просто завернутый в обещание.
getCurrentTasks(): ng.IPromise<Array<ReadingLog.Models.UserGoal>> {
var promise = this.$q.defer();
var goals = this.createStaticGoals();
promise.resolve(goals);
return promise.promise;
}
Кто-нибудь может видеть, что мне не хватает, это должно быть что-то простое, но я просто не вижу его.
В функции значение this
зависит от того, как вызвана функция, и в этом случае она не относится к вашему контроллеру. Если вы действительно хотите, чтобы он ссылался на ваш контроллер, вы можете использовать Function.prototype.bind
:
dataService.getCurrentTasks()
.then((function (results: Array<ReadingLog.Models.UserGoal>) {
this.goals = results;
}).bind(controller));
Вы можете узнать больше об этом ключевом слове здесь и здесь.
Также обратите внимание, что чистым назвать результат this.$q.defer()
, deferred
:
var deferred = this.$q.defer();