source : bicycling-layer.js

  1. /**
  2. * @ngdoc directive
  3. * @name bicycling-layer
  4. * @param Attr2Options {service}
  5. * convert html attribute to Google map api options
  6. * @description
  7. * Requires: map directive
  8. * Restrict To: Element
  9. *
  10. * @example
  11. *
  12. * <map zoom="13" center="34.04924594193164, -118.24104309082031">
  13. * <bicycling-layer></bicycling-layer>
  14. * </map>
  15. */
  16. (function() {
  17. 'use strict';
  18. var parser;
  19. var linkFunc = function(scope, element, attrs, mapController) {
  20. mapController = mapController[0]||mapController[1];
  21. var orgAttrs = parser.orgAttributes(element);
  22. var filtered = parser.filter(attrs);
  23. var options = parser.getOptions(filtered, {scope: scope});
  24. var events = parser.getEvents(scope, filtered);
  25. console.log('bicycling-layer options', options, 'events', events);
  26. var layer = getLayer(options, events);
  27. mapController.addObject('bicyclingLayers', layer);
  28. mapController.observeAttrSetObj(orgAttrs, attrs, layer); //observers
  29. element.bind('$destroy', function() {
  30. mapController.deleteObject('bicyclingLayers', layer);
  31. });
  32. };
  33. var getLayer = function(options, events) {
  34. var layer = new google.maps.BicyclingLayer(options);
  35. for (var eventName in events) {
  36. google.maps.event.addListener(layer, eventName, events[eventName]);
  37. }
  38. return layer;
  39. };
  40. var bicyclingLayer= function(Attr2MapOptions) {
  41. parser = Attr2MapOptions;
  42. return {
  43. restrict: 'E',
  44. require: ['?^map','?^ngMap'],
  45. link: linkFunc
  46. };
  47. };
  48. bicyclingLayer.$inject = ['Attr2MapOptions'];
  49. angular.module('ngMap').directive('bicyclingLayer', bicyclingLayer);
  50. })();