Angular ngx-spinner没有显示

7

我需要在从httpclient获取数据之前显示旋转图标。但是旋转图标没有显示。

我只需要在API返回数据之前显示旋转图标或加载程序,以便用户可以看到数据正在加载。我的.html有没有问题?

当我筛选数据时它会显示,但在页面加载时不会显示。

    import { Component, OnInit } from '@angular/core';
    import { ApiService } from 'app/services/api/api.service';
    import { map } from 'rxjs/operators';
    import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
    import { HttpClient, HttpHeaders } from '@angular/common/http';
    import { NgxSpinnerService } from 'ngx-spinner';
    import { Observable } from 'rxjs/Observable';
    import 'rxjs/add/operator/map'

    @Component({
    selector: 'app-home',
    templateUrl: './home.component.html',
    styleUrls: ['./home.component.scss']
    })
    export class HomeComponent {

      clientData: Observable<any>;
      data: any  = []; 
      status: any = [];
      countunsettled: any;
      countsettled: any;
      sums: any;

      policy_id:Set = new Set();

       constructor(private modalService: NgbModal, private api:ApiService, public httpClient: HttpClient, private spinner: NgxSpinnerService) { 

       this.getClaims();
      }

      userFilter: any = { policy_id:'', claim_no:'', member_name:'', status:'', company_id: ''};

    openDeal(deletecontent,x){
       this.selectedDeal = x;
        this.dealModal= this.modalService.open(deletecontent, x);
        this.dealModal.result.then(r=>{
        }, err=> console.log(err))
    }

     getClaims(){
           this.spinner.show();

     if(this.userFilter.company_id){
       let url = 'xyz.com.pk'+this.userFilter.company_id;
     }else{
       let url = xyz.com.pk.php?offset=0&limit=100';

      }

     this.clientData = this.httpClient.get(url).
     subscribe(data => {
       console.log(data);
       this.spinner.hide();

       this.data = data.records;
       this.data.forEach(d => this.policy_id.add(d.policy_id));

     var status = 'settled';
     var status2 = 'submitted';

     var countsettled = this.data.filter((obj) => obj.status === status).length;
     var countunsettled = this.data.filter((obj) => obj.status === status2).length;

     console.log(countsettled);
     this.countsettled = countsettled;
     console.log(countunsettled);
     this.countunsettled = countunsettled;

     const sum1 = this.data.filter(item => item.status === 'settled')
                     .reduce((acc, item) => acc + Number(item.approved_value), 0);
                     console.log(sum1);
                     this.sum1 = sum1;

     const sum2 = this.data.filter(item => item.status === 'submitted')
                     .reduce((acc, item) => acc + Number(item.approved_value), 0);
                     console.log(sum2);
                     this.sum2 = sum2
         }
      }
    }

HTML模板:

<ngx-spinner></ngx-spinner>

没有显示任何错误,也没有显示旋转器。


请分享您的component.ts完整代码。 - Nithya Rajan
附上完整代码。但现在当我过滤数据时,它显示旋转器。但当页面加载时它没有显示旋转器。 - Umaiz Khan
你所说的页面加载实际上是指什么?你是指 Angular 项目的初始主页加载吗? - Nithya Rajan
1
当我登录时,这个 home.component 就会打开。我需要在这里放置 loader,直到数据被获取之前,旋转图标才会显示在页面上。 - Umaiz Khan
8个回答

16
我在从11升级到13时遇到了这个问题。
以下是您需要采取的步骤:
  1. package.json文件中:
 "dependencies": {
    ...
    "ngx-spinner": "^13.1.1",
    ...

或者点击这里">这里进行安装。

  1. angular.json文件中:
"architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            ...
            "styles": [
              "node_modules/material-design-icons/iconfont/material-icons.css",
              "node_modules/ngx-spinner/animations/ball-circus.css", // This wasn't required in version 11.
              "src/styles.scss" 
            ],
  • app.module.ts 文件中:
  • import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
    import { NgxSpinnerModule } from "ngx-spinner";
    ...
              imports: [
                        MatModule,
                        NgxSpinnerModule,
                        CommonModule
              ],
              exports: [
                        MatModule,
                        NgxSpinnerModule,
    ...
    schemas:[CUSTOM_ELEMENTS_SCHEMA] // This is new to version 13 as well,
    
  • home.component.ts 文件中:
  • import { NgxSpinnerService } from 'ngx-spinner';
    ...
    constructor (private spinnerService: NgxSpinnerService, ...){...}
    ...
    //wherever show needed:
    this.spinnerService.show();
    
    //wherever you want to hide the spinner:
    this.spinnerService.hide();
    

    在HTML文件中:
    ...
    <ngx-spinner bdColor="rgba(51,51,51,0.8)" size="large" color="#fff" type="ball-circus" [fullScreen] = "true"></ngx-spinner>
    ...
    

    较旧版本的设置略有不同。自从我从11版升级到13版以来,微调器就停止工作了。我花了一天时间找到适用于13版的这个设置。
    参考: https://www.npmjs.com/package/ngx-spinner

    4
    谢谢您的建议。是的,在angular.json中包含样式是必要的。我不需要使用CUSTOM_ELEMENTS_SCHEMA。另外,请确保在将样式添加到angular.json后重新启动您的应用程序。 - masum7
    谢谢。这节省了我数小时的调查时间。 - icSapper

    7
    在ngAfterViewInit中调用spinner.show(),否则this.spinner将为未定义。
    ngAfterViewInit(): void { this.spinner.show(); }
    

    有没有一种方法可以从基于点击的操作中调用Spinner? - EnigmaTech

    3

    我不得不修改@abbas这部分解决方案

    "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            ...
            "styles": [
              "node_modules/material-design-icons/iconfont/material-icons.css",
              "node_modules/ngx-spinner/animations/ball-circus.css", // This wasn't required in version 11.
              "src/styles.scss" 
            ],
    

    将CSS文件路径添加到styles中对我没有起作用。所以,我必须像这样在styles.scss中导入它。

    @import "~ngx-spinner/animations/ball-circus.css";
    

    0

    我遇到了同样的问题,简单的解决方法是无论你在HTML中使用什么动画类型,请确保在angular.json中添加了相应的CSS。

    例如: HTML:

    <ngx-spinner
    bdColor="rgba(0, 0, 0, 0.8)"
    size="medium"
    color="#fff"
    type="line-spin-fade" // type
    [fullScreen]="false"
    ><p style="color: white">Loading...</p>
    </ngx-spinner>
    

    angular.json / project.json(NX)

    "node_modules/ngx-spinner/animations/line-spin-fade.css" //use same type css
    

    0

    我遇到了一个问题,ngx-spinner 在我的电脑上没有显示。我将它降级到 7.0.0 版本,现在它可以正常工作了。"ngx-spinner": "7.0.0"


    0
    如果在设置完成后,您看到了一个覆盖层但没有动画本身,请重新启动应用程序。之后动画应该会出现。

    0

    试试这个。在stackblitz中的示例

    在你的typescript文件中

    import { NgxSpinnerService } from "ngx-spinner";
    constructor(private spinner: NgxSpinnerService) { }
    
    ngOnInit() {
        this.spinner.show();
    
        setTimeout(() => {
             this.spinner.hide();
        }, 2000);
    }
    

    0
    请根据您的Angular版本使用正确的ngx-spinner版本。 如果您使用的是Angular 15,但安装了最新版本的ngx-spinner,则会出现错误。
    以下是所有ngx-spinner版本: https://www.npmjs.com/package/ngx-spinner?activeTab=versions 通过以下方式进行安装:
    npm i ngx-spinner@<YOUR_VERSION_HERE>
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接