2017-02-12 2 views
1

AngularJS에서 Angular로 이동하려는 마지막 날을 보냈습니다. 이미 웹 응용 프로그램이있어서 운동을 위해 다시 작성하고 싶습니다. 이전 버전에서 가지고 있던 기능 중 하나는 HTTP 요청 중에로드 스피너였습니다. Google과 온라인 자습서에서 Angular로 어떻게 할 수 있는지 살펴보고 서비스를 선택했습니다.로딩 스피너 표시 및 숨기기 HTTP에서 각도로

spinner.service.ts

import { Injectable } from '@angular/core'; 
import { Observable, Subject } from 'rxjs/Rx'; 

export interface ISpinnerState { 
    show: boolean 
} 

@Injectable() 
export class SpinnerService { 
    private _spinnerSubject = new Subject(); 

    spinnerState = <Observable<ISpinnerState>>this._spinnerSubject; 

    show() { 
    this._spinnerSubject.next(<ISpinnerState>{ show: true }); 
    } 

    hide() { 
    this._spinnerSubject.next(<ISpinnerState>{ show: false }); 
    } 
} 

spinner.component.ts 순간

import {Component, OnDestroy, OnInit} from '@angular/core'; 
import { Subscription } from 'rxjs/Rx'; 

import { ISpinnerState, SpinnerService } from './spinner.service'; 

@Component({ 
    selector: 'loading-spinner', 
    template: ` 
    <div 
     class="spinner"> 
    </div> 
    `, 
    styles: [`.spinner {position: absolute;left: 46%;top: 12%;background-color:black;width:50px;height:50px}`] 
}) 

export class SpinnerComponent implements OnDestroy, OnInit { 
    visible = false; 

    private _spinnerStateChanged: Subscription; 

    constructor(private _spinnerService: SpinnerService) { } 

    ngOnInit() { 
    this._spinnerStateChanged = this._spinnerService.spinnerState 
     .subscribe((state: ISpinnerState) => this.visible = state.show); 
    } 

    ngOnDestroy() { 
    this._spinnerStateChanged.unsubscribe(); 
    } 
} 

는 그냥 검은 색 사각형 그래서 내가 할 수 있습니다 : 여기에 코드입니다 그것을 시험해 보라. 그 후에 적절한 로딩 아이콘을 추가하겠습니다. 다음은 HTTP 요청 중에 호출하는 또 다른 서비스입니다.

....other stuff 

@Injectable() 
export class ApartmentService { 

    constructor(
    private _http: Http, 
    private _spinnerService: SpinnerService 
) { } 

getApartments() { 
    this._spinnerService.show(); 
    return this._http.get(API + 'apartments') 
     .map((response: Response) => <Apartment[]>response.json().apartments) 
     //.catch(this._exceptionService.catchBadResponse) 
     .finally(() => this._spinnerService.hide()); 
    } 

} 

문제는 스피너는 항상 볼 수 있다는 것입니다 apartment.service.ts. 로딩 과정뿐만 아니라 나는 내가 잘못한 것을 볼 수 없다. 어떤 생각?

+1

'spinnerState = <관찰 가능한 > this._spinnerSubject은,''spinnerState = <관찰 가능한해야한다 > this._spinnerSubject.asObservable(); ' –

+0

서비스를 제공하는 곳은 어디입니까? –

+0

어디에서 '표시'를 사용하여 회 전자를 표시하거나 숨 깁니까? –

답변

1

난 당신이 (가) visible 상태에 따라/숨기기를 보여 바인딩 누락 생각 : 내가 생각

<div *ngIf="visible" 
    class="spinner"> 
</div> 
+0

구성 요소에서'visible = false' 위에 추가되었지만 여전히 동일하게 HostBinding을 가져 왔습니다. 행동. 회 전자는 항상 보입니다. – Tasos

+0

거룩한 ... 나는'* ngIf'를 놓친 것을 믿을 수 없다. 나는 2 일 동안 코드에 무엇이 잘못되었는지를 알아 내려고 모든 2 줄의 코드를 체크하지 않았다 : P 이제 작동한다.) – Tasos