Я новичок в typescript и angular.js, и я борюсь с http-запросом на получение. Я использую DefinitelyTyped для определений типов angular.
Мой код контроллера выглядит так:
module game.Controller {
'use strict';
export interface IGameScope extends ng.IScope {
vm: GameCtrl;
}
export class GameCtrl {
private bonus: any;
private http: any;
constructor($scope: IGameScope, $http: ng.IHttpService, $location: ng.ILocationService) {
$scope.vm = this;
this.http = $http;
}
doBet() {
this.http.get('http://localhost:9000/db').success(function(data: any, status: any) {
this.bonus = data;
}
);
}
}
}
а мой взгляд такой:
<button ng-click="vm.doBet()">bet</button>
<div><span>bonus: {{ vm.bonus }}</span></div>
привязка модели просмотра работает нормально, когда я меняю бонусную переменную без http-запроса. Но когда я пытаюсь обновить переменную бонуса в функции успеха запроса на получение, я получаю следующую ошибку:
TypeError: Cannot set property 'bonus' of undefined
Как я могу обновить переменные в функции успеха?
Я также был бы признателен за любое предложение, если есть лучший/более чистый способ или практика обновления данных по запросам.
this.http.get('url').success(function(data, status) { ... });
, поэтомуthis
не отображается в функции успеха. лямба-выражение, как показано выше, автоматически компилируется вvar _this = this; this.http.get('url').success(function(data, status) { _this.member = "something"; });
, поэтомуthis
становится видимым в области видимости через вспомогательную переменную_this
. надеюсь, это поможет. 04.07.2014