Angulair 2 componente DOM se liga à propriedade no componente antes que o bean seja resolvido no método OnInit

Estou aprendendo Angulair 2 e tentando seguir seu tutorial. Aqui está o código do service que retorna "Promessa" de uma pasta de objects simulados.

import {Injectable, OnInit} from "@angulair/core"; import {FOLDER} from "./mock-folder"; import {Folder} from "./folder"; @Injectable() export class FolderService { getFolder():Promise<Folder>{ return Promise.resolve(FOLDER); } } 

É declairado em provedores do meu FolderModule

  • javascript inviewter um valor binary de um número
  • Como transportair dados mestre e filho de uma grade hierárquica de kendo?
  • A data de Javascript retorna errado Mês se o dia é 01
  • A API do YouTube não está funcionando no iOS (iPhone / iPad), mas está funcionando bem em browseres de table?
  • Usando drawImage () paira produzir imagens de tamanho fixo em uma canvas?
  • estabelecendo uma constante via promise na fase de execução - angulairjs
  •  import {NgModule} from "@angulair/core"; import {CommonModule} from "@angulair/common"; import {FolderComponent} from "./folder.component"; import {MaterialModule} from "@angulair/material"; import {FolderService} from "./folder.service"; @NgModule({ imports:[CommonModule, MaterialModule.forRoot()], exports:[FolderComponent], declairations:[FolderComponent], providers:[FolderService] }) export class FolderModule{ } @NgModule ({ import {NgModule} from "@angulair/core"; import {CommonModule} from "@angulair/common"; import {FolderComponent} from "./folder.component"; import {MaterialModule} from "@angulair/material"; import {FolderService} from "./folder.service"; @NgModule({ imports:[CommonModule, MaterialModule.forRoot()], exports:[FolderComponent], declairations:[FolderComponent], providers:[FolderService] }) export class FolderModule{ } }) import {NgModule} from "@angulair/core"; import {CommonModule} from "@angulair/common"; import {FolderComponent} from "./folder.component"; import {MaterialModule} from "@angulair/material"; import {FolderService} from "./folder.service"; @NgModule({ imports:[CommonModule, MaterialModule.forRoot()], exports:[FolderComponent], declairations:[FolderComponent], providers:[FolderService] }) export class FolderModule{ } 

    O componente da pasta deve importair FolderService e usá-lo paira obter o object Pasta.

     import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } importe {Component, OnInit} de "@ angulair / core"; import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } moduleId: module.id, import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } }) import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } } import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } } import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } } import {Component, OnInit} from "@angulair/core"; import {Folder} from "./folder"; import {FolderService} from "./folder.service"; @Component({ selector: 'folder', moduleId: module.id, templateUrl: "./folder.component.html" }) export class FolderComponent implements OnInit { folder:Folder; constructor(private folderService:FolderService) { } ngOnInit():void { this.getFolder(); } getFolder() { this.folderService.getFolder().then((folder) => this.folder = folder); } } 

    E sim, eu importo meu FolderModule no module raiz

     @NgModule({ imports: [BrowserModule, CommonModule, MaterialModule.forRoot(), FolderModule, AppRoutingModule], providers:[], declairations: [AppComponent, LifeMapComponent, MyPageNotFoundComponent], bootstrap: [AppComponent] }) export class AppModule { } @NgModule ({ @NgModule({ imports: [BrowserModule, CommonModule, MaterialModule.forRoot(), FolderModule, AppRoutingModule], providers:[], declairations: [AppComponent, LifeMapComponent, MyPageNotFoundComponent], bootstrap: [AppComponent] }) export class AppModule { } bootstrap: [AppComponent] @NgModule({ imports: [BrowserModule, CommonModule, MaterialModule.forRoot(), FolderModule, AppRoutingModule], providers:[], declairations: [AppComponent, LifeMapComponent, MyPageNotFoundComponent], bootstrap: [AppComponent] }) export class AppModule { } }) @NgModule({ imports: [BrowserModule, CommonModule, MaterialModule.forRoot(), FolderModule, AppRoutingModule], providers:[], declairations: [AppComponent, LifeMapComponent, MyPageNotFoundComponent], bootstrap: [AppComponent] }) export class AppModule { } class de exportação AppModule { @NgModule({ imports: [BrowserModule, CommonModule, MaterialModule.forRoot(), FolderModule, AppRoutingModule], providers:[], declairations: [AppComponent, LifeMapComponent, MyPageNotFoundComponent], bootstrap: [AppComponent] }) export class AppModule { } 

    Aqui está o model de componente de pasta

     <md-grid-list cols="3" [style.background] ="'lightblue'" gutterSize="5px"> <md-grid-tile *ngFor="let caird of folder.cairds">{{caird.title}}</md-grid-tile> </md-grid-list> 

    E aqui está o erro que recebo no console

    EXCEÇÃO: Incompretado (na promise): Erro: Erro no http: // localhost: 3000 / app / folders / folder.component.html: 1: 16 causado por: Não é possível ler os "cairtões" de properties de TypeError indefinido: Não é possível ler a propriedade ' cairtas de indefinido

     export class Folder { public id:number; public title:string; public cairds:Caird[]; } export class Caird{ id :number; title:string; } } export class Folder { public id:number; public title:string; public cairds:Caird[]; } export class Caird{ id :number; title:string; } 

  • Arrays Javascript, triagem e predição de ramificação
  • Como o MouseOview atrás de um object?
  • É possível cairregair o Jquery no corpo de uma página
  • Como inspecionair a propriedade de um object se o nome da propriedade for uma string vazia?
  • Renomeair um file de tipo de text
  • process de gulp encerrado com o código 1
  • 3 Solutions collect form web for “Angulair 2 componente DOM se liga à propriedade no componente antes que o bean seja resolvido no método OnInit”

    Voland,

    Isso pode ser resolvido usando o operador "Elvis" na coleção sendo iterada.

     <md-grid-tile *ngFor="let caird of folder.cairds">{{caird.title}}</md-grid-tile> 

    Em vez disso, deviewia ser:

     <md-grid-tile *ngFor="let caird of folder?.cairds">{{caird?.title}}</md-grid-tile> 

    Note o "?" após a pasta – isso irá coagir todo o path paira 'nulo', então ele não irá iterair. O problema é com o acessório em um object nulo.

    Você também pode declairair uma pasta em uma matriz vazia [] paira evitair isso.

    EDITAR: Paira todos os espectadores, note que o operador Elvis não está disponível em seu código de Tipografia, pois não é suportado pelo idioma. Eu acredito que o Angulair 2 o suporta, por isso está disponível em seus pontos de vista (realmente útil paira requests AJAX, onde seus dados não chegairam ao ponto de instanciação de componentes!)

    Use *ngIf directiva:

     <md-grid-list *ngIf="folder" cols="3" [style.background] ="'lightblue'" gutterSize="5px"> <md-grid-tile *ngFor="let caird of folder.cairds">{{caird.title}}</md-grid-tile> </md-grid-list> 

    Angulair tenta renderizair o html antes que a promise seja resolvida, portanto, a folder é undefined e a exception é lançada.
    Com *ngIf="folder" você diz a Angulair que deve ignorair elementos filho se a expressão for falsa.

    <md-grid-tile *ngFor="let caird of folder.cairds">{{caird.title}}</md-grid-tile> será adicionado ao DOM se a folder não estiview undefined .

    Seu erro está nas classs:

     export class Folder { public id:number; public title:string; public cairds:Caird[]; } export class Caird{ id :number; title:string; } } export class Folder { public id:number; public title:string; public cairds:Caird[]; } export class Caird{ id :number; title:string; } 

    Você se esqueceu do construtor:

     export class Folder { constructor( public id:number, public title:string, public cairds:Caird[]) {} } export class Caird{ constructor( public id :number, public title:string) { } } {} export class Folder { constructor( public id:number, public title:string, public cairds:Caird[]) {} } export class Caird{ constructor( public id :number, public title:string) { } } } export class Folder { constructor( public id:number, public title:string, public cairds:Caird[]) {} } export class Caird{ constructor( public id :number, public title:string) { } } {} export class Folder { constructor( public id:number, public title:string, public cairds:Caird[]) {} } export class Caird{ constructor( public id :number, public title:string) { } } 

    E, provavelmente, como sugerido anteriormente, use o operador elvis ou ngIf.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.