2016-09-21 4 views
1

Доброго утра,Angular2 SPA (REST API) основные прибудет (CRUD)

У меня есть фоновый работать красиво, но просто не может закончить фронт!

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

Может кто-нибудь посоветует или направит учебник?

Это то, что я в настоящее время используют, чтобы помочь: Angular-2-crud

Благодарности ТРУ

cashmovement-list.component.ts

import { Component, OnInit, ViewChild, Input, Output, trigger, state, style, animate, transition } from '@angular/core'; 

import { ModalDirective } from 'ng2-bootstrap'; 

import { DataService } from '../shared/services/data.service'; 
import { DateFormatPipe } from '../shared/pipes/date-format.pipe'; 
import { ItemsService } from '../shared/utils/items.service'; 
import { NotificationService } from '../shared/utils/notification.service'; 
import { ConfigService } from '../shared/utils/config.service'; 
import { ICashMovement, Pagination, PaginatedResult } from '../shared/interfaces'; 

@Component({ 
moduleId: module.id, 
selector: 'cashmovements', 
templateUrl: 'cashmovement-list.component.html' 
}) 

export class CashMovementListComponent implements OnInit { 
    public cashmovements: ICashMovement[]; 

constructor(private dataService: DataService, 
    private itemsService: ItemsService, 
    private notificationService: NotificationService) { } 


ngOnInit() { 
    this.dataService.getCashMovements() 
     .subscribe((cashmovements: ICashMovement[]) => { 
      this.cashmovements = cashmovements; 
     }, 
     error => { 
      this.notificationService.printErrorMessage('Failed to load users. ' + error); 
     }); 
} 

} 

cashmovement-list.component.html

<button class="btn btn-primary" type="button" *ngIf="cashmovements"> 
 
    <i class="fa fa-calendar" aria-hidden="true"></i> CashMovements 
 
    <span class="badge">{{totalItems}}</span> 
 
</button> 
 
    
 
<hr/> 
 
    
 
<div [@flyInOut]="'in'"> 
 
    <table class="table table-hover"> 
 
     <thead> 
 
      <tr> 
 
       <th><i class="fa fa-text-width fa-2x" aria-hidden="true"></i>Cash Movement ID</th> 
 
       <th><i class="fa fa-user fa-2x" aria-hidden="true"></i>PortfolioCode</th> 
 
       <th><i class="fa fa-paragraph fa-2x" aria-hidden="true"></i>CCY Out</th> 
 
       <th><i class="fa fa-map-marker fa-2x" aria-hidden="true"></i>Account Out</th> 
 
       <th><i class="fa fa-calendar-o fa-2x" aria-hidden="true"></i>Date</th> 
 
      </tr> 
 
     </thead> 
 
     <tbody> 
 
      <tr *ngFor="let cashmovement of cashmovements"> 
 
       <td> {{cashmovement.CashMovementId}}</td> 
 
       <td>{{cashmovement.PortfolioCode}}</td> 
 
       <td>{{cashmovement.Ccyo}}</td> 
 
       <td>{{cashmovement.AccountO}}</td> 
 
       <td>{{cashmovement.Date | dateFormat | date:'medium'}}</td> 
 
      </tr> 
 
     </tbody> 
 
    </table> 
 
</div>

interfaces.ts

export interface ICashMovement { 
CashMovementId: number; 
PortfolioCode: string; 
Date: Date; 
Ccyo: string;  
AccountO: string; 
ValueO: number; 
Ccyi: string;  
AccountI: string; 
ValueI: number; 
status: string; 
comment: string; 
LastUpdate: number; 
} 

app.module.ts

import './rxjs-operators'; 

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 

import { PaginationModule } from 'ng2-bootstrap/ng2-bootstrap'; 
import { DatepickerModule } from 'ng2-bootstrap/ng2-bootstrap'; 
import { Ng2BootstrapModule } from 'ng2-bootstrap/ng2-bootstrap'; 
import { ModalModule } from 'ng2-bootstrap/ng2-bootstrap'; 
import { ProgressbarModule } from 'ng2-bootstrap/ng2-bootstrap'; 
import { SlimLoadingBarService, SlimLoadingBarComponent } from 'ng2-slim- loading-bar'; 
import { TimepickerModule } from 'ng2-bootstrap/ng2-bootstrap'; 

import { AppComponent } from './app.component'; 
import { DateFormatPipe } from './shared/pipes/date-format.pipe'; 
import { HighlightDirective } from './shared/directives/highlight.directive'; 
import { HomeComponent } from './home/home.component'; 
import { MobileHideDirective } from './shared/directives/mobile-hide.directive'; 

import { CashMovementListComponent } from './cashmovements/cashmovement-list.component'; 

import { routing } from './app.routes'; 


import { DataService } from './shared/services/data.service'; 
import { ConfigService } from './shared/utils/config.service'; 
import { ItemsService } from './shared/utils/items.service'; 
import { MappingService } from './shared/utils/mapping.service'; 
import { NotificationService } from './shared/utils/notification.service'; 

@NgModule({ 
imports: [ 
    BrowserModule, 
    DatepickerModule, 
    FormsModule, 
    HttpModule, 
    Ng2BootstrapModule, 
    ModalModule, 
    ProgressbarModule, 
    PaginationModule, 
    routing, 
    TimepickerModule 
], 
declarations: [ 
    AppComponent, 
    DateFormatPipe, 
    HighlightDirective, 
    HomeComponent, 
    MobileHideDirective, 
    SlimLoadingBarComponent, 
    CashMovementListComponent   
], 
providers: [ 
    ConfigService, 
    DataService, 
    ItemsService, 
    MappingService, 
    NotificationService, 
    SlimLoadingBarService 
], 
bootstrap: [AppComponent] 
}) 
export class AppModule { } 

data.service.ts

import { Injectable } from '@angular/core'; 
import { Http, Response, Headers } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import {Observer} from 'rxjs/Observer'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 

import { ICashMovement, Pagination, PaginatedResult } from '../interfaces'; 
import { ItemsService } from '../utils/items.service'; 
import { ConfigService } from '../utils/config.service'; 

@Injectable() 
export class DataService { 

    _baseUrl: string = ''; 

    constructor(private http: Http, 
     private itemsService: ItemsService, 
     private configService: ConfigService) { 
     this._baseUrl = configService.getApiURI(); 
    } 


    getCashMovements(): Observable<ICashMovement[]> { 
     return this.http.get(this._baseUrl + 'cashmovements') 
      .map((res: Response) => { return res.json();  }) 
      .catch(this.handleError); 
    } 

    private handleError(error: any) { 
     var applicationError = error.headers.get('Application-Error'); 
     var serverError = error.json(); 
     var modelStateErrors: string = ''; 

     if (!serverError.type) { 
      console.log(serverError); 
      for (var key in serverError) { 
       if (serverError[key]) 
        modelStateErrors += serverError[key] + '\n'; 
      } 
     } 

     modelStateErrors = modelStateErrors = '' ? null : modelStateErrors; 

     return Observable.throw(applicationError || modelStateErrors || 'Server error'); 
    } 


} 
+0

Вы ничего не видите? Какую продукцию вы получаете? Вы получаете таблицу с по крайней мере 'th'? –

+0

Hi Husein, Страница загружается с заголовками –

ответ

1

Я думаю, проблема может быть в вашем templateUrl. Вы должны префикс частичного представления с ./ независимо от того, используете ли вы moduleId. Вам необходимо указать templateUrl: "./cashmovement-list.component.html"

Однако, если вы получаете какую-либо ошибку в консоли dve своего браузера, вы должны разместить ее как ответ на свой вопрос.

+0

Это был отличный подарок, спасибо. Он не полностью решил проблему. Теперь я получаю таблицу

+0

, также нет консольных ошибок ... единственное, что в режиме разработки работает Angular 2. Call enableProdMode() для включения режима производства. –

+1

Используете ли вы ASP.NET Web API? это то, что у вас есть одна и та же серверная модель CashMovement, и в то же время вы включили оболочку верблюда? Вы получите столько строк, сколько есть на сервере, но поскольку нет четкого перехода от сервера к клиенту, ваши свойства могут быть пустыми В вашей ngOnInit попробуйте вызвать 'console.log (this.cashmovements)' в качестве следующей строки, чтобы вы могли видеть, что приходит с сервера. –