javascript - Nemožno volať atribút deklarovaný v konštruktore z metódy triedy
Mám HomeController, ktorý má metódu index. V konštruktore som deklaroval túto premennú this.data. Keď volám this.data v metóde index, dostanem chybu s hlásením ako
TypeError: Nie je možné prečítať vlastnosť 'data' z nedefinovanej hodnoty
Tento HomeController:
import Controller from "./../../vendor/controller";
import * as express from "express";
import hException from "./../helper/exception.helper";
class HomeController extends Controller {
data:object
constructor(){
super()
this.data = {
tes: 'tes'
}
}
async index(request:express.Request, response:express.Response, next:express.NextFunction):Promise<any>{
try {
let template = 'home/index';
//next to viewer
response.render(template, { layout: 'dashboard', data: this.data});
} catch (error) {
next(new hException(error))
}
}
}
export default HomeController
Trasy, ktoré volajú HomeController:
import * as express from "express";
import Controller from "./../../controller/home.controller";
import { Jwt as MJwt } from "./../../middleware/auth.middleware";
class Routes {
private router:express.Router = express.Router()
private path:string = '/'
private controller:Controller
private MJwt = new MJwt()
constructor() {
this.controller = new Controller;
this.run()
}
public run(){
this.router.route(this.path)
.get(
this.controller.index
);
}
}
export default Routes
Odpoveď č. 1
Tento problém bol vyriešený deklarovaním metódy HomeController s arrow function, odkaz na podrobnosti. alebo použitím bind funkcie, odkaz na podrobnosti.
Riešené pomocou šípovej funkcie