Связывание AngularJS и TypeScript не работает

0

У меня есть следующий очень простой 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;
}

Кто-нибудь может видеть, что мне не хватает, это должно быть что-то простое, но я просто не вижу его.

Теги:

1 ответ

1
Лучший ответ

В функции значение 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();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню