반응형
http promise가 있는 typscript 모듈에서 "this"가 정의되지 않은 이유
이것은 나의 첫 번째 활자이고 각진 시도이고 나는 한 가지 문제에 빠져있다.
모듈 컨트롤러는 다음과 같은 방법으로 정의되어 있습니다.
module app.controllers {
"use strict"
import services = app.services;
export class calendarController {
calBlock: any;
deptId: number;
calSvc: app.services.calendarService;
static $inject = ["$scope", "calendarService"];
constructor(isolateScope: directives.calendarScope, calSvc: services.calendarService) {
this.deptId = isolateScope.deptId;
this.calSvc = calSvc;
calSvc.getMonthBlock(12, 2015, 1, this.deptId)
.then(
function (response) {
//promise fullfilled (regardless of outcome)
this.calBlock = response.data;
},
function (error) {
//handle errors
alert(error);
}
);
}
}
}
이 컨트롤러가 의존하는 서비스는 다음과 같습니다.
module app.services {
"use strict"
export class calendarService {
private _http: ng.IHttpService;
static $inject = ["$http"];
constructor(http: ng.IHttpService) {
this._http = http;
}
getMonthBlock = function (month:number, year:number, calId:number, deptId:number) {
//initialise service url
var sURL = _sf.getServiceRoot('KrisisShifts') + "CalendarService/GetMonthCal/" + calId + "/" + deptId + "/" + month + "/" + year;
//create config object for get function
var config = {
URL: sURL,
method: "GET",
dataType: 'json',
headers: {
'ModuleId': _sf.getModuleId(),
'TabId': _sf.getTabId(),
'RequestVerificationToken': _sf.getAntiForgeryValue()
}
}
//return the promise of the http.get function
return this._http.get(sURL, config);
}
}
}
컨트롤러 모듈의 다음 라인에서 문제가 발생합니다.
this.calBlock = response.data;
문제는 THIS가 정의되어 있지 않기 때문에 calBlock도 정의되어 있지 않고 jsConsole에서 다음 오류가 발생한다는 것입니다.
TypeError: shift-controller.defined?cdv=28:14에 정의되지 않은 속성 'calBlock'을 설정할 수 없습니다.
저는 javascript와 angular, typescript를 비교적 잘 모르기 때문에 왜 "this"가 정의되어 있지 않은지 잘 모르겠습니다.함수에 둘러싸여 있기 때문인 것 같습니다.
컨트롤러의 typscript 클래스의 calBlock 속성에 reponse.data($http 호출의 json 배열)를 할당하는 방법이 필요합니다.응답 기능 내에서 정의되지 않은 이유와 액세스 방법을 이해할 수 있는 사람이 있습니까?
감사해요.
편집: TYME 기반 솔루션JV의 답변
다시 쓴 calBlock 콜을 다음에 나타냅니다.
calSvc.getMonthBlock(12, 2015, 1, this.deptId)
.then((response) => {
//promise fullfilled (regardless of outcome)
this.calBlock = response.data;
},
(error) => {
//handle errors
alert(error);
}
);
왜냐하면 의 맥락은this
콜백으로 손실됩니다.타이프스크립트에서 화살표 함수를 사용하여 컨텍스트를 보존합니다!
calSvc.getMonthBlock(12, 2015, 1, this.deptId).then((response) => {
})
언급URL : https://stackoverflow.com/questions/33851786/why-this-is-undefined-in-typescript-module-with-http-promise
반응형
'programing' 카테고리의 다른 글
Wordpress: 태그로 게시물을 가져오려고 합니다. (0) | 2023.03.22 |
---|---|
모든 Oracle 패키지와 프로시저를 전문으로 검색할 수 있는 방법이 있습니까? (0) | 2023.03.22 |
app.config에서 서비스 주입 (0) | 2023.03.22 |
jQuery AJAX 요청이 IE에서 실패함 (0) | 2023.03.22 |
각도: ng-bind-html 필터가 ng-click을 제외합니까? (0) | 2023.03.22 |