2016-06-16 20 views
19

Jestem stosunkowo nowy zarówno dla Angular2, jak i maszynopisu. Ponieważ maszynopis jest nadzbiorem javascript, oczekiwałbym, że zadziałają takie funkcje, jak console.log. console.log działa doskonale w plikach .ts, gdy znajduje się poza klasą komponentów, ale nie działa tak, jak oczekiwałbym od wewnątrz klasy komponentów.console.log nie działa w Angular2 Component (Maszynopis)

// main.ts 

import { Component } from '@angular/core'; 
console.log("Hello1"); //1. This works perfectly 

@Component({..) 
export class App { 
s: string = "Hello2"; 
// console.log(s); //2. This gives compilation error (when uncommented) 
// Error: Function implementation is missing or not immediately following the declaration. 
} 

Czy jest coś, czego mi brakuje?

+1

co umieściłeś w komponencie @Component? Czy możesz spróbować umieścić konstruktora w klasie tak: Konstruktor() {console.log ("test")} –

+1

Myślę, że to nie działa, ponieważ console.log nie jest zawinięty w funkcję. czy możesz pokazać skompilowany formularz JS? –

+0

@ L.querter: console.log działa, gdy jest używane wewnątrz konstruktora, ale nie działa, gdy jest używane poza konstruktorem, nawet jeśli obecny jest konstruktor. Może konieczne jest zawinięcie go w funkcję. Nie wiedziałem o tym. –

Odpowiedz

36

Nie działa, ponieważ console.log() nie znajduje się w "obszarze wykonywalnym" klasy "App".

Klasa jest strukturą złożoną z atrybutów i metod.

Jedynym sposobem na wykonanie kodu jest umieszczenie go w metodzie, która ma zostać wykonana. Na przykład: konstruktor()

console.log('It works here') 
 

 
@Component({..) 
 
export class App { 
 
s: string = "Hello2"; 
 
      
 
    constructor() { 
 
    console.log(this.s)    
 
    }    
 
}

Think klasy jak zwykły JavaScript Object.

Czy ma sens oczekiwanie, że to zadziała?

class: { 
 
    s: string, 
 
    console.log(s) 
 
}

Jeśli nadal nie ma pewności, spróbuj zabaw maszynopis, gdzie można zobaczyć kod maszynopis generowane na zwykły javascript.

https://www.typescriptlang.org/play/index.html

+0

Inicjowanie zmiennych jest również wyrażeniem i jestem zdezorientowany, dlaczego działa to poza zasięgiem konstruktora, a wywołania funkcji nie. –

+0

Spróbuj tego playgrounga, o którym wspomniałem powyżej, zobaczysz, że każda definicja zmiennej jest transponowana do treści funkcji javascript. –

3

The console.log powinny być zapakowane w funkcji „default” funkcja dla każdej klasy jest jej constructor więc należy nie zadeklarował.

Powiązane problemy