2016-07-31 2 views
1

Я создаю приложение, используя проект SB Admin BS 4 Angular2.Angular2 Initial Page Render not display data

У меня есть одна страница, на которой не отображаются данные из служебных вызовов. Однако, когда я нажимаю на одно из полей ввода, отображаются данные. Вызовы из служб являются точными, а данные - в объектах, используемых для отображения на странице.

Любое понимание того, почему первоначальный вид страницы не отображает модель, и список оценивается.

БЛАГОДАРЯ

Вот фрагмент кода.

import {Component, OnInit, ChangeDetectionStrategy, Pipe} from '@angular/core'; 
import {Router, RouteSegment} from '@angular/router'; 
//import {Observable} from 'rxjs/Observable'; 
import { PAGINATION_DIRECTIVES} from 'ng2-bootstrap/ng2-bootstrap'; 
import { ROUTER_DIRECTIVES} from '@angular/router'; 
import { TAB_DIRECTIVES} from 'ng2-bootstrap/ng2-bootstrap'; 
import {FORM_DIRECTIVES} from '@angular/common'; 
import {CatalogService} from '../../../services/catalog-service'; 
import {CategoryService} from '../../../services/category-service'; 
import {ProductCatalogService} from '../../../services/product-catalog-service'; 
import {ProductCategoryService} from '../../../services/product-category-service'; 
import {Catalog} from '../../../models/catalog-model'; 
import {Category} from '../../../models/category-model'; 
import {ProductCatalog} from '../../../models/product-catalog-model'; 
import {Page} from '../../../shared/page'; 

@Component({ 
    selector: 'catalog-detail-component', 
    directives: [PAGINATION_DIRECTIVES, FORM_DIRECTIVES, ROUTER_DIRECTIVES, TAB_DIRECTIVES], 
    changeDetection: ChangeDetectionStrategy.OnPush, 
    providers: [CatalogService, ProductCatalogService, CategoryService, ProductCategoryService], 
    templateUrl: './pages/catalog-detail/components/catalog-detail.html' 
}) 

export class CatalogDetailComponent implements OnInit { 
    public level:number; 
    public paramsSub:any; 
    public catalog:Catalog = new Catalog(); 
    public catalogId:number; 
    public productTabActive:boolean = true; 
    public categories:Array<Category> = []; 
    public productCatalogs:Array<ProductCatalog> = []; 
    public productsPage:Page; 
    public productsTotalItems:number; 
    public productsCurrentPage: number; 
    public productsMaxSize:number; 
    public productsNumPages:number; 
    public categoriesPage:Page; 
    public categoriesTotalItems:number; 
    public categoriesCurrentPage: number; 
    public categoriesMaxSize:number; 
    public categoriesNumPages:number; 
    public page:Page; 
    public bigTotalItems:number; 
    public bigCurrentPage: number; 
    public maxSize:number; 
    public numPages:number; 
    public data:any; 
    public complete:boolean; 
    constructor(private _router: Router, 
       private routeSegment: RouteSegment, 
       private catalogService: CatalogService, 
       private productCatalogService: ProductCatalogService, 
       private productCategoryService: ProductCategoryService, 
       private categoryService: CategoryService) { 
    this.productsPage = new Page(); 
    this.productsPage.number = 0; 
    this.productsPage.totalElements = 0; 
    this.productsPage.size = 20; 
    this.productsPage.totalPages = 0; 
    this.productsMaxSize = 20; 
    this.categoriesPage = new Page(); 
    this.categoriesPage.number = 0; 
    this.categoriesPage.totalElements = 0; 
    this.categoriesPage.size = 20; 
    this.categoriesPage.totalPages = 0; 
    this.categoriesMaxSize = 20; 
    } 
    ngOnInit() { 
    this.catalogId = +this.routeSegment.getParam('catalogId'); 
    // Get the Catalog 
    this.catalogService.find(this.catalogId).subscribe(
     data => { 
     // delete the _links from the response 
     delete data['_links']; 
     // Set the catalogs Array 
     this.catalog = data; 
     }, 
     error => console.log('Could not find catalog.') 
    ); 
    // Get the Product Catalogs 
    this.productCatalogService.findByCatalogId(this.catalogId).subscribe(
     data => { 
     // delete the _links from the response 
     delete data['_links']; 
     // Set the catalogs Array 
     this.productCatalogs = data['_embedded'].productCatalogs; 
     this.paramsSub = 1; 
     // Set the Page Object 
     this.productsPage = data['page']; 
     this.productsPage.totalElements = this.page['totalElements']; 
     this.productsCurrentPage = this.page['number']; 
     if (this.productsCurrentPage === 0) { 
      this.productsCurrentPage = 1; 
     } 
     //this.numPages = this.page['totalPages']; 
     this.productsMaxSize = 10; 
     }, 
     error => console.log('Could not find catalog.') 
    ); 
    // Get the Catalogs 
    this.categoryService.findByCatalogId(this.catalogId).subscribe(
     data => { 
     // delete the _links from the response 
     delete data['_links']; 
     // Set the catalogs Array 
     this.categories = data['_embedded'].categories; 
     this.paramsSub = 1; 
     // Set the Page Object 
     this.page = data['page']; 
     this.categoriesPage.totalElements = this.page['totalElements']; 
     this.categoriesCurrentPage = this.page['number']; 
     if (this.categoriesCurrentPage === 0) { 
      this.categoriesCurrentPage = 1; 
     } 
     //this.numPages = this.page['totalPages']; 
     this.categoriesMaxSize = 10; 
     }, 
     error => console.log('Could not find catalog.') 
    ); 
    } 

Вот фрагмент шаблона HTML

<div class="col-xl-6 col-lg-12"> 
     <h2>Catalog Detail</h2> 
     <div class="table-responsive"> 
     <form #catalogDetailForm="ngForm" (ngSubmit)="onSubmit()"> 
      <div class="form-group row col-lg-12"> 
      <label for="catalogId" class="col-sm-2 form-control-label">Catalog Id:</label> 
      <div class="col-sm-10"> 
       <input type="number" [(ngModel)]="catalog.catalogId" name="catalog.catalogId" class="form-control" id="catalogId" placeholder="Catalog Id" value="catalog.catalogId"> 
      </div> 
      </div> 
      <div class="form-group row col-lg-12"> 
       <label for="webCatalogId" class="col-sm-2 form-control-label">Web Catalog Id:</label> 
       <div class="col-sm-10"> 
       <input type="number" [(ngModel)]="catalog.webCatalogId" class="form-control" id="webCatalogId" placeholder="Web Catalog Id" value="catalog.webCatalogId"> 
       </div> 
      </div> 
      <div class="form-group row col-lg-12"> 
      <label for="catalogName" class="col-sm-2 form-control-label">Catalog Name:</label> 
      <div class="col-sm-10"> 
       <input type="text" [(ngModel)]="catalog.catalogName" class="form-control" id="catalogName" placeholder="Catalog Name" value="catalog.catalogName"> 
      </div> 
      </div> 
      <div class="form-group row col-lg-12"> 
      <label for="catalogDescription" class="col-sm-2 form-control-label">Catalog Description:</label> 
      <div class="col-sm-10"> 
       <input type="text" [(ngModel)]="catalog.catalogDescription" class="form-control" id="catalogDescription" placeholder="Catalog Description" value="catalog.catalogDescription"> 
      </div> 
      </div> 
      <div class="form-group row col-lg-12"> 
      <label for="effectiveDate" class="col-sm-2 form-control-label">Effective Date:</label> 
      <div class="col-sm-10"> 
       <input type="date" [(ngModel)]="catalog.effectiveDate" class="form-control" id="effectiveDate" placeholder="Effective Date" value="catalog.effectiveDate"> 
      </div> 
      </div> 
      <div class="form-group row col-lg-12"> 
      <div class="col-sm-offset-2 col-sm-10"> 
       <button type="submit" class="btn btn-primary pull-right">Save</button> 
      </div> 
      </div> 
     </form> 
     </div> 
+0

Просьба предоставить код, который демонстрирует то, что вы пытаетесь выполнить. Whit this information Я уверен, что у вас есть ошибка где-то, но я не вижу способа дать вам более конкретную информацию ;-) –

+0

Gunter, спасибо. , Я уверен, что я делаю что-то неправильно, не знаю, что. Когда страница отображается на экране, каталог.catalogName отображает текст заполнителя. Затем, когда я нажимаю на имя каталога или поле описания, значения отображаются. Спасибо за ваше время! – Don

+1

Выполняя некоторую отладку, я обнаружил, что наличие changeDetection: ChangeDetectionStrategy.OnPush вызывает проблему .... У меня было это в коде как часть реализации вкладок ng2-bootstrap .... – Don

ответ

0

Добавление markForCheck(); в каждом из методов data => {..... this.cd.markForCheck(); .....} решили проблему. Необходимо также импортировать ChangeDetectorRef .... -