2017-10-05 2 views
0

Voici une question relative à la portée dans le typecript. Les travaux constants listofstuff si à l'extérieur du support de fermeture de classe, mais pas si elle est à l'intérieur du supportPourquoi un const doit-il être en dehors de la classe export en tapuscrit?

par exemple, ce code ne fonctionne pas:

import {Injectable} from '@angular/core' 

    @Injectable() 
    export class EventListService{ 
    getEvents(){ 
    return listofstuff 
    } 
const listofstuff = [ 
    {name:'Angular Connect', date: '9/26/2036', time: '10am', location: {address: '1 London Rd', city: 'London', country: 'England'}}, 
    {name:'ng-nl', date: '4/15/2037', time: '9am', location: {address: '127 DT ', city: 'Amsterdam', country: 'NL'}}, 
    {name:'ng-conf 2037', date: '4/15/2037', time: '9am', location: {address: 'The Palatial America Hotel', city: 'Salt Lake City', country: 'USA'}}, 
    {name:'UN Angular Summit', date: '6/10/2037', time: '8am', location: {address: 'The UN Angular Center', city: 'New York', country: 'USA'}}, 
] 
} 

mais cela fonctionne:

import {Injectable} from '@angular/core' 

    @Injectable() 
    export class EventListService{ 
    getEvents(){ 
    return listofstuff 
    } 
} 
const listofstuff = [ 
    {name:'Angular Connect', date: '9/26/2036', time: '10am', location: {address: '1 London Rd', city: 'London', country: 'England'}}, 
    {name:'ng-nl', date: '4/15/2037', time: '9am', location: {address: '127 DT ', city: 'Amsterdam', country: 'NL'}}, 
    {name:'ng-conf 2037', date: '4/15/2037', time: '9am', location: {address: 'The Palatial America Hotel', city: 'Salt Lake City', country: 'USA'}}, 
    {name:'UN Angular Summit', date: '6/10/2037', time: '8am', location: {address: 'The UN Angular Center', city: 'New York', country: 'USA'}}, 
] 

Venant d'un arrière-plan orienté objet (C# et quelques java), c'est étrange pour moi. quelqu'un peut-il expliquer ce qui se passe ici? Même en utilisant le mot-clé "this" dans le premier exemple ne fonctionne pas ...

+0

Vous ne pouvez pas avoir les propriétés de l'objet 'const' (pouvez-vous?) – Pointy

+0

Dans TypeScript, [dans la portée de la classe] (https://github.com/Microsoft/TypeScript/issues/12), il faut utiliser' readonly' au lieu de 'const'. Voir aussi https://stackoverflow.com/questions/46561155/difference-between-const-and-readonly-in-typescript – artem

Répondre

3

Vous ne pouvez pas utiliser le mot-clé const pour les propriétés de classe. Au lieu de cela, les propriétés de classe ne peuvent être marquées qu'avec les modificateurs public, private, readonly et protected.

import { Injectable } from '@angular/core' 

@Injectable() 
export class EventListService { 
    readonly listofstuff: any[] = [ 
    { name: 'Angular Connect', date: '9/26/2036', time: '10am', location: { address: '1 London Rd', city: 'London', country: 'England' } }, 
    { name: 'ng-nl', date: '4/15/2037', time: '9am', location: { address: '127 DT ', city: 'Amsterdam', country: 'NL' } }, 
    { name: 'ng-conf 2037', date: '4/15/2037', time: '9am', location: { address: 'The Palatial America Hotel', city: 'Salt Lake City', country: 'USA' } }, 
    { name: 'UN Angular Summit', date: '6/10/2037', time: '8am', location: { address: 'The UN Angular Center', city: 'New York', country: 'USA' } }, 
    ]; 

    getEvents() { 
    return this.listofstuff; 
    } 
} 

Vous souhaitez accéder à la propriété de la classe listofstuff en utilisant le mot-clé this. Example

Vous pouvez en savoir plus sur les classes Typescript dans la version officielle documentation. Gardez à l'esprit les propriétés et les membres sans identificateur sont marqués public par défaut. De la documentation:

En TypeScript, chaque membre est public par défaut.

Espérons que cela aide!

+0

Très utile. Je vous remercie! –