0

Я пытаюсь передать из одной директивы (пункты претензии) другую директиву (баннерные точки) при нажатии кнопки «Пункты претензии».угловая трансляция с директивы

<button name="button" claim-points>Claim Points</button> 

Я хотел бы, чтобы скрыть этот элемент «Banner Button», пока трансляция не отправляется из директивы претензии-бальной директива баннерных-бальных:

<div name="bannerBtn" banner-points ng-if="isVisible">html from banner-points directive displayed here</div> 

Так, по Требованиям точек нажатия кнопки , это становится и пробегает по некоторым данным ... если он находит соответствие, он ретранслирует showbanner:

angular 
    .module('myApp') 
    .directive('claimPoints', ['$rootScope', '$http', function ($rootScope, $http) { 
     return { 
      restrict: 'AE', 
      link: function (scope, elem, attr) { 
       elem.bind('click', function() { 
        $http.get('/testJSON/points.json').success(function(data) { 
          var found = false; 
          angular.forEach(data.data, function(v, k) { 
           if (!found) { 
            if (v.award_name === attr.award) { 
             found = true; 
             $rootScope.$broadcast('showbanner', v.points); 
            } 
           } 
          } 
         ); 
        }); 
       }); 
      } 
     }; 
    } 
]); 

вещание должно быть отправлено scope.$on('showbanner, ... here and set the "Banner Button" attribute isVisible to true... which should trigger the ng-if` на кнопку.

angular 
    .module('myApp') 
    .directive('bannerPoints', function() { 
     return { 
      restrict: '', 
      templateUrl: '<div>some html I want to display', 
      link: function (scope, elem, attr) { 
       attr.isVisible = false; 
       scope.$on('showbanner', function(e, b) { 
        attr.isVisible = true; 
       }); 
      } 
     }; 
}); 

Вещание не происходит.

+0

ле это можно сделать вещи на jsfidle? – bmscomp

+0

Эта директива используется несколько раз на одном html? –

+0

@pankajparkar Нет, он просто используется один раз – Growler

ответ

1

Там нет необходимости создавать bannerPoints, которые будут иметь $on слушателя, как вы директива не создает изолированную сферу, вам нужно только передать isVisible области видимости имя переменной claimPoints директивы, то вместо широковещательных можно непосредственно использовать SCOPE [AttrS. isVisible] & сделать так, чтобы ng-if="isVisible" будет удовлетворен, и эта кнопка будет показана.

Markup

<button name="button" claim-points is-visible="isVisible">Claim Points</button> 

<button name="bannerBtn" ng-if="isVisible"> 
    <div>some html I want to display></div> 
</button> 

Директива

angular.module('myApp') 
.directive('claimPoints', ['$rootScope', '$http', function($rootScope, $http) { 
    return { 
    restrict: 'AE', 
    link: function(scope, elem, attr) { 
     elem.bind('click', function() { 
     $http.get('/testJSON/points.json').success(function(data) { 
      var found = false; 
      angular.forEach(data.data, function(v, k) { 
      if (!found) { 
       if (v.award_name === attr.award) { 
       found = true; 
       //this will set isVisible scope to true 
       scope[attrs.isVisible] = true; 
       } 
      } 
      }); 
     }); 
     }); 
    } 
    }; 
}]); 
+1

спасибо за это. Точкой второй директивы bannerPoints является то, что она будет загружать HTML-шаблон со всеми вещами, следовательно, необходимость в трансляции. – Growler

+0

@ Growler Я не видел этого в вашей текущей директиве .. мог бы объяснить больше о каких вещах? & какой шаблон вы собираетесь загрузить ... в каком месте? –

+0

извините за это. После нажатия кнопки «Очки с претензиями» передается широковещательная передача, в которой будет отображаться директива 'bannerPoints'. Это должно отображать шаблон с некоторыми html/изображениями и т. Д. См. Выше edit – Growler

Смежные вопросы