Git Product home page Git Product logo

angular-click-outside's Introduction

angular-click-outside

An Angular directive to detect a click outside of an elements scope. Great for closing dialogues, drawers and off screen menu's etc.

Recent changes

  • Shortened Bower description to remove Bower warning on install (thanks @jcubic)
  • Thanks to @Lorelei for the pull request to pass the event back in the callback function
  • Thanks to @CosticaPuntaru for the improvement to now allow the directive to no longer need an id on the element for this to work
  • Added basic ngdocs documentation
  • Removed the addition of the element id to the classes array as now it no longer needs to be checked

Roadmap

  • Addition of outside-if attribute. Ability to restrict click outside registering to defined elements (opposite of outside-if-not) rather than anywhere outside an element
  • Look into the worth of converting directive to Angular 1 component
  • Conversion of directive to Angular 2 component

Installation

There are two easy ways to install the clickoutside directive:

Manual download

Download the clickoutside.directive.js file, and include it in your index.html file with something like:

<script type="text/javascript" src="/path/to/clickoutside.directive.js"></script>

Also be sure to include the module in your app.js file with:

npm

=======

angular.module('yourAppName', ['angular-click-outside'])

Bower

=======

npm install @iamadamjowett/angular-click-outside

Usage

=======

bower install angular-click-outside --save

Usage

The directive will work with either ID's or classes, however, be wary of using classes as quite often some unwanted elements may have the same class, and so will be excluded/included unintentionally.

If you are sure that you want to exclude/include all elements with a class however the directive will work just fine as it looks through the classNames as well as looking at the given ID list.

General though ID's will suffice, but instances of dynamically inserted list items may require the use of classes.

Add the directive via the click-outside attribute, and give exceptions via the outside-if-not attribute.

Basic example:

<div class="menu" click-outside="closeThis">
    ...
</div>

This is of little use though without a callback function to do something with that click:

<div class="menu" click-outside="closeThis()">
    ...
</div>

Where closeThis() is the function assigned to the scope via the controller such as:

angular
    .module('myApp')
    .controller('MenuController', ['$scope', MenuController]);

function MenuController($scope) {
    $scope.closeThis = function () {
        console.log('closing');
    }
}
<button id="my-button">Menu Trigger Button</button>
<div ng-controller="MenuController">
    <div class="menu" click-outside="closeThis()" outside-if-not="my-button">
        ...
    </div>
</div>

Adding Exceptions

You can also add exceptions via the outside-if-not tag, which executes the callback function, but only if the ID's or classes listed aren't clicked.

In this case closeThis() will be called only if clicked outside and #my-button wasn't clicked as well (note .my-button also would be an exception). This can be great for things like slide in menus that might have a button outside of the menu scope that triggers it:

<button id="my-button">Menu Trigger Button</button>
<div class="menu" id="main-menu" click-outside="closeThis()" outside-if-not="my-button">
    ...
</div>

You can have more than one exception by comma delimiting a list such as:

<button id="my-button">Menu Trigger Button</button>
<div class="menu" id="main-menu" click-outside="closeThis()" outside-if-not="my-button, another-button">
    ...
</div>
<button id="another-button">A second trigger button</button>

angular-click-outside's People

Contributors

iamadamjowett avatar adammettro avatar fela98 avatar ascripnic avatar anatejms avatar holm avatar marcin-wosinek avatar mariomc avatar ppalladino avatar quentin-sommer avatar bryant1410 avatar lorelei avatar costicapuntaru avatar tobiasbueschel avatar aderjaan avatar apansky avatar koningskristof avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.