代码之家  ›  专栏  ›  技术社区  ›  SFAH

角度5:微调器在页面加载时工作不正常

  •  3
  • SFAH  · 技术社区  · 7 年前

    以下是我的服务,其中我发出两个事件 dataLoaded loadingData 我想分别在加载和加载数据时显示和隐藏GIF图像,在组件中我捕获这两个事件并更改布尔变量的值。但是当第一次加载页面时,最初加载的GIF没有显示,当加载数据时,GIF出现,如果我选择过滤器进行搜索,那么它工作正常,并且当我调试代码时 showLoading 已成功更新

    服务

    import { forwardRef, Injectable, EventEmitter } from '@angular/core';
        import { Http, Headers, RequestOptions, Response, URLSearchParams } from '@angular/http';
        import 'rxjs/add/operator/toPromise';
    
    
        @Injectable()
        export class SearchService {
         loadingData = new EventEmitter();
            dataLoaded = new EventEmitter();
         pages: any = {};
            searchResults = [];
         search() {
                this.loadingData.emit("ShowLoading")
                this.performSearch().then(response => {
                    this.searchResults = response.json();
                    this.pages = this.searchResults['pages'];
                    this.searchResults = this.searchResults['data'];
                    this.resultsUpdated.emit('SearchResultsUpdated');
                    this.dataLoaded.emit("HideLoading")
                }, error => {
                       this.dataLoaded.emit("HideLoading")
                 });
            }
        }
    

    组成部分

    import { Component, ViewChild, ElementRef } from '@angular/core';
    import { SearchService } from '../../search.service';
    /*import {Alert} from "../../alert.component";*/
    import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
    import { SavedSearchComponent } from '../saved-search/saved-search.component';
    @Component({
     selector: 'property-onion-search-results',
      templateUrl: './search-results.component.html'
    })
    
    export class SearchResultsComponent {
      @ViewChild('searchResultArea') resultsArea: ElementRef;
      searchResults: any[] = null;
      closeResult: string;
      view = 'regular';
      resultInformation: any[];
      filterString: string = "";
      resultCount: number = 0;
      numbers: any[] = null;
      showLoading;
    
      constructor(private searchService: SearchService, private modalService: NgbModal) {
    
        this.searchService.resultsUpdated.subscribe(data => {
          this.searchResults = this.searchService.getResults();
          this.filterString = this.searchService.toString();
          this.resultCount = this.searchService.pages.total;
          var pages = this.searchService.pages.number_of_pages;
          if (this.searchService.pages.total > 25) {
            this.numbers = new Array(pages).fill(1).map((x, i) => i);
          } else {
            this.numbers = null;
          }
          this.resultsArea.nativeElement.click(); // THis is a hack to fix refresh issue of this area. This area doesn't get refreshed unless you click somewhere in the browser.          
        });
    
        this.searchService.loadingData.subscribe(data => {
          console.log("show")
          this.showLoading = true
        });
        this.searchService.dataLoaded.subscribe(data => {
          console.log("hide")
          this.showLoading = false
        });
    
      }
    }
    

    html

    <img class="loading" *ngIf="showLoading" src="images/loader.gif"/>
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Pterrat    7 年前

    对于初始加载,您应该定义 显示加载 直接在组件中:

    showLoading:boolean = true;