Skip to content

emptyflash/angular-promise-buttons

 
 

Repository files navigation

Stories in Ready Stories in progress Build Status Coverage Status

angular-promise-buttons

Chilled Buttons for AngularJS

There are cool loading buttons out there for angular. Only thing which annoys me, is that you (most of the times) have to manually trigger their loading state via a boolean which leads to a bit of repetition, declaring those again and again. angular-promise-buttons exists to take away some of that, by handling the loading state directly by passing the promise. Saves you two lines of code every time. Check out the DEMO!

Also you can play with the code on Plnkr.

Bug-reports or feature request as well as any other kind of feedback is highly welcome!

getting started

Install it via bower

bower install angular-promise-buttons -S

and add angularPromiseButtons as dependency in your main module:

angular.module('yourApp',[
  'angularPromiseButtons'
]);

Using the buttons is easy. Just hand over the promise in question to the promiseBtn-directive and you're good to go:

<button class="btn"
        ng-click="yourServiceCaller()"
        promise-btn="yourPromise">MyBtn <span>Look I'm nested content</span>
</button>

Now you just have to assign a promise to yourPromise:

// inside some controller
$scope.yourServiceCaller = function ()
{
  $scope.yourPromise = fakeFactory.method().then(...);
};

styling the button

The base-styles might not be overwhelmingly sexy, but it is easy to fix that! There are lots of free css-spinners out there. Just find one of your liking and add the css.

Ressources:

configuration

There are also some defaults for you to set, if you like. You can do this by using the angularPromiseButtonsProvider:

angular.module('exampleApp', [
  'angularPromiseButtons'
])
.config(function (angularPromiseButtonsProvider)
{
  angularPromiseButtonsProvider.extendConfig({
    spinnerTpl: '<span class="btn-spinner"></span>',
    disableBtn: true,
    btnLoadingClass: 'is-loading',
    addClassToCurrentBtnOnly: false,
    disableCurrentBtnOnly: false
  });
});

change options via promise-btn-options

You can also change all the options (but not the spinner template) by specifying the options via promise-btn-options:

<button class="btn"
        ng-click="yourServiceCaller()"
        promise-btn-options="options"
        promise-btn="yourPromise">MyBtn <span>Look I'm nested content</span>
</button>

Now you just have to assign a promise to yourPromise:

// inside some controller
$scope.options = {
  disableBtn: false,
  btnLoadingClass: 'is-spinning'
};
$scope.yourServiceCaller = function ()
{
  $scope.yourPromise = fakeFactory.method().then(...);
};

Thats all the logic there is (for now). Adjusting the look and feel of the spinner can be done using your own styles.

❤ contribute ❤

I'm happy for any issue or feature request, you might encounter or want to have. Even a one liner is better, than no feedback at all. Pull requests are also highly welcome. Just fork the repository, clone it and run grunt serve for development. Another important factor is the number of developers using and thus testing angular-promise-buttons. Tell your fellow programmers, say that you use it on ng-modules, tweet or even blog about it.

angular-promise-buttons is published under the The GNU Lesser General Public License V2.1.

(possible) promising future features

About

Chilled loading buttons for AngularJS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 77.4%
  • HTML 12.7%
  • CSS 9.9%