How to add a spinner while loading the content in AngularJS?

后端 未结 7 2021
谎友^
谎友^ 2021-01-02 02:09

I am using button spinner while loading the content, when the user clicks on the \"Search\" button content will load, at this time buttonLabel will be changed t

相关标签:
7条回答
  • 2021-01-02 02:24

    You should use ng-class to add/remove the class .spinning based on $scope.test. I have updated your fiddle here: http://jsfiddle.net/xc6nx235/15/

    0 讨论(0)
  • 2021-01-02 02:28

    For Angular2/4, you can use [hidden] to control the visibility of the spinner. Here is a Plunker.

    <button class="btn btn-primary" (click)="onClickDoSomething()">
      <span [hidden]="!spin">
            <i class="glyphicon glyphicon-refresh spinning"></i>
        </span> Do something
    </button>
    

    Where spinning is defined in as:

    <style>
      .spinning {
        animation: spin 1s infinite linear;
      }
    
      @keyframes spin {
        from {
          transform: scale(1) rotate(0deg);
        }
        to {
          transform: scale(1) rotate(360deg);
        }
      }
    </style>
    

    And your component simply sets the boolean to control the visibility of the spinner. In this example, we simply spin for 10 seconds.

    import {Component} from 'angular2/core';
    import {Observable} from 'rxjs/Rx';
    
    @Component({
      selector: 'do-something',
      templateUrl: 'src/dosomething.html'
    })
    export class DoSomething {
       private spin: boolean = false;
    
       onClickDoSomething() {
         this.spin = true;
         this.sub = Observable.interval(10000).subscribe(x => {
             this.sub.unsubscribe();
             this.spin = false;
         }); 
       }
    }
    
    0 讨论(0)
  • 2021-01-02 02:31

    Just add an ng-show to your spinner:

    <span ng-show="loading"><i class="glyphicon glyphicon-refresh spinning"></i></span>
    

    and controller:

    .controller("LocationFormCtrl", function ($scope) {
        $scope.searchButtonText = "Search";
        $scope.loading = false;
        $scope.test="false";
        $scope.search = function() {
          $scope.test="true";
          $scope.loading="true"
          $scope.searchButtonText = "Searching";
          // Do your searching here
       }
    });
    

    Then, when you get your response, set $scope.loading to false again

    Demo

    0 讨论(0)
  • 2021-01-02 02:36

    You can also use this simple directive:

    https://rawgit.com/jvdvleuten/angular-button-spinner/master/demo.html

    To use it, just add the button-spinner='loading' attribute:

    <button class="btn btn-success" ng-click="show()" button-spinner="loading">Load</button>
    

    It will append a spinner to it, inside the button, when your loading variable in the scope is true.

    0 讨论(0)
  • 2021-01-02 02:38

    Use ng-show directive like this ng-show="test" on spinner span:

    Snippet:

    // http://icelab.com.au/articles/levelling-up-with-angularjs-building-a-reusable-click-to-edit-directive/
    
    angular.module("formDemo", [])
    
    .controller("LocationFormCtrl", function($scope) {
      $scope.searchButtonText = "Search";
      $scope.test = "false";
      $scope.search = function() {
        $scope.test = "true";
        $scope.searchButtonText = "Searching";
        // Do your searching here
      }
    });
    </style> <!-- Ugly Hack due to jsFiddle issue:http://goo.gl/BUfGZ --> 
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/foundation/4.1.6/css/foundation.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> --> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> <script src="https://rawgithub.com/angular-ui/angular-ui/master/build/angular-ui.js"></script> <style> body {
      font-family: "HelveticNeue", sans-serif;
      font-size: 14px;
      padding: 20px;
    }
    h2 {
      color: #999;
      margin-top: 0;
    }
    .field {
      margin-bottom: 1em;
    }
    .click-to-edit {
      display: inline-block;
    }
    input {
      display: initial !important;
      width: auto !important;
      margin: 0 5px 0 0 !important;
    }
    .glyphicon.spinning {
      animation: spin 1s infinite linear;
      -webkit-animation: spin2 1s infinite linear;
    }
    @keyframes spin {
      from {
        transform: scale(1) rotate(0deg);
      }
      to {
        transform: scale(1) rotate(360deg);
      }
    }
    @-webkit-keyframes spin2 {
      from {
        -webkit-transform: rotate(0deg);
      }
      to {
        -webkit-transform: rotate(360deg);
      }
    }
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="formDemo" ng-controller="LocationFormCtrl">
      <div>
        <button type="submit" class="btn btn-primary" ng-click="search()">
          <span ng-show="test"><i class="glyphicon glyphicon-refresh spinning"></i></span>
          {{ searchButtonText }}
        </button>
      </div>
    </div>

    0 讨论(0)
  • 2021-01-02 02:48
    <div ng-app="formDemo" ng-controller="LocationFormCtrl">
    <div>
        <button type="submit" class="btn btn-primary" ng-click="search()"> 
            <span ng-show="searchButtonText == 'Searching'"><i class="glyphicon glyphicon-refresh spinning"></i></span>
            {{ searchButtonText }}
        </button>
    </div>
    

    All you need to do is use ng-show or ng-hide directives.

    ng-show="expression"

    <span ng-show="searchButtonText == 'Searching'">
        <i class="glyphicon glyphicon-refresh spinning"></i>
    </span>
    

    this span will only be visible when searchButtonText will be equal to a string 'Searching'.

    You should learn more about angular's directives. They'll be useful in future.

    Good luck.

    Demo http://jsfiddle.net/xc6nx235/16/

    0 讨论(0)
提交回复
热议问题