Passing data from one directive to another in AngularJS -


i have 2 directives, , intent populate ng-repeat second 1 $http query made in first one. how pass data 1 other?

here's code:

var app = angular.module('myapp');   app.directive('release', ['musicinfoservice',   function(musicinfoservice) {      return {       restrict: 'e',       scope: {         release: '=',         artist: '='       },       template: '<div class="release">' +         '<div class="wrapper"><img class="img-responsive" ng-src="{{imagesrc}}"/><div id="text" ng-click="getversions(release)"></div></div>{{release.title | characters:65}}' +         '</div>',       replace: false,       link: function(scope, elem, attr) {         var defaultimage = 'img/record-default.png';         scope.imagesrc = defaultimage;         musicinfoservice.getalbuminfo(scope.artist.name, scope.release.title)           .success(function(data) {             if (data.error) return;              var image = data.album.image[2],               imageurl = defaultimage;              if (image['#text'] !== '') {               imageurl = image['#text'];             }              scope.imagesrc = imageurl;           });          scope.getversions = function(release) {            if (angular.isundefined(release)) return;            musicinfoservice.getreleaseversions(release.id)             .success(function(data) {               release.versions = data.versions;             });         };       }     };   } ]);  app.directive('thedirective', ['musicinfoservice',   function(musicinfoservice) {   return {     restrict: 'a',     scope: { position: '@', last: '@', release: '=',         artist: '=' },     link: function(scope, element, attrs) {        element.bind('click', function() {          // highlight clicked element         angular.element(document.queryselector('.clicked')).removeclass('clicked');         element.addclass('clicked');          // create collapse element or select existing 1         var collapsequery = document.queryselector('#collapse');         var collapse = collapsequery === null ?           angular.element('<div id="collapse" class="col-xs-12"><ul><li>{{release.title}}</li><li ng-repeat="version in release.versions | filter:\'!mp3\' | filter:\'!wav\' ">{{version.format}}</li></ul></div>') :           angular.element(collapsequery);          // based on position of clicked element calculate rounded number nearest multiple of 4         var calculatedposition = math.ceil(scope.position / 4) * 4;          // element @ calculated position or last 1         var calculatedquery = document.queryselector('[position="' + calculatedposition + '"]');         if (calculatedquery === null) calculatedquery = document.queryselector('[last="true"]');;          var calculatedelement = angular.element(calculatedquery);          // insert collapse element after element @ calculated position         calculatedelement.after(collapse);          // highlight calculated element         angular.element(document.queryselector('.calculated')).removeclass('calculated');         calculatedelement.addclass('calculated');       });        scope.$on('$destroy', function() {         element.unbind('click');       });     }   }; } ]); 

the first directive makes call:

      scope.getversions = function(release) {            if (angular.isundefined(release)) return;            musicinfoservice.getreleaseversions(release.id)             .success(function(data) {               release.versions = data.versions;             });         }; 

and need use results here, in second directive:

var collapsequery = document.queryselector('#collapse');     var collapse = collapsequery === null ?       angular.element('<div id="collapse" class="col-xs-12"><ul><li>{{release.title}}</li><li ng-repeat="version in release.versions | filter:\'!mp3\' | filter:\'!wav\' ">{{version.format}}</li></ul></div>') :       angular.element(collapsequery); 

any thoughts?

edit: i've created plunker illustrate problem.

i recommend use factory create service holds shared data. service injected both of directives dependency.

app.factory("shareddataservice", function() {             return {                 yourdata: "whatever"             };         }); 

see :

hope helps

update

i created plunker illustrate mean


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -