Skip to content

Instantly share code, notes, and snippets.

Last active August 29, 2015 14:13
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
.directive('elem', function(ElementRegistry) {
return {
restrict: 'A',
scope: false,
link:function(scope, element, attrs){
// store this element with reference to the parent scope
new ElementRegistry(scope).add(attrs.elem, element);
.factory('ElementRegistry', function () {
var id, // scope id to store on the class
waitingFor={}; // dictionary of callbacks we are waiting for
function ElementRegistry(scope){
id = scope.$id;
// initialize class stores if they are undefined = || {};[id] =[id] || {};
// get a key from the store
function findByKey(key){
return[id][key] ?[id][key] : false;
// hold on to a call back until it is needed
function storeCallback(key, callback){
waitingFor[key] = callback;
// run the stored callback
function fireCallback(key){
ElementRegistry.prototype = {
// return the found value otherwise run a callback once found
find: function(key, callback){
var found = findByKey(key);
storeCallback(key, callback);
return found;
// add an element to the scope store
add: function(key, value){[id][key] = value;
// return the storage object
store: function(){
return ElementRegistry;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment