2015-01-04 6 views
1

Я хочу отправить событие из моего контроллера представления в директиву (я хотел бы запрограммировать общий предупреждающий ящик, который может получать предупреждения через событие контроллера внешнего вида). Я сделал следующее:angular Отправить событие в директиву

В моем шаблоне вида я добавил директиву:

HTML шаблон зрения:

<alert-box></alert-box> 

в контроллере представления:

$scope.$broadcast('add-alert', {type: 'danger', msg: message}); 

Моя директива:

.directive(
'alert-box', [function() { 
    return { 
     restrict: 'E', 
     templateUrl: '/directives/alert-box.html', 
     scope: false, 
     controller: [ 
     "$scope", 
     function ($scope) { 

      $scope.alerts = []; 

      $scope.$on('add-alert', function(event, arg) { 
      $scope.addAlert(arg); 
      }); 

      $scope.addAlert = function (alert) { 
      $scope.alerts = []; 
      $scope.alerts.push(alert); 
      }; 

      $scope.closeAlert = function (index) { 
      $scope.alerts.splice(index, 1); 
      }; 
     }] 
    } 
    } 
]); 

Согласно документам, вы должны объявить scope: false так, чтобы вы наследовали область видимости из области внешнего контроллера. Поскольку я использую $ broadcast, который должен распространять событие вниз по hirachy, я бы за исключением этого, чтобы работать, но это не так. Моя единственная мысль, что контроллер внутри директивы всегда создает изолированную область видимости. (?)

+1

Ваша директива должна быть названа 'alertBox' не' alert-box' inorder, чтобы иметь возможность использовать ее в представлении как 'alert-box'. Названия директив должны следовать за концом подвески верблюда. Маркировка для закрытия как опечатка. И посмотрите на это [работа здесь] (http://plnkr.co/edit/55cWtBVpD547XvCugjRN?p=preview) – PSL

+0

@PSL Я знаю, что вы не должны сказать спасибо на SO в комментариях, так что ... да, я просто пропустил это. ..) -: – morpheus05

ответ

1

Ваш пример показывает несоответствие имен, имя директивы должны быть alertBox вместо предупреждения коробки, чтобы иметь тег быть

+0

Вы видели мой комментарий ... Как раз вовремя .. :) до 5 минут отредактируйте время huff ... Ваш ответ неправильный, независимо. Вам не нужно делать область действия. $ Применяются для этой цели, и ваш оператор 'при обработке асинхронных событий, который требует обертывания кода с помощью $ apply, чтобы получить угловой, чтобы повторно отобразить представление', является абсолютно неправильным. – PSL

+0

@PSL только что увидел ваш рабочий пример, не стесняйтесь добавлять ответ для morpheus05, и я удалю свою, если вы хотите получить ответ. Я просто привык к тому, чтобы использовать подобную проблему, используя события. – Gent

+0

Извините, я не буду добавлять ответ, так как я считаю, что это опечатка и отмечены для закрытия для опечатки. Но так как вы обновили свой ответ, чтобы удалить неправильный оператор, я бы удалил свой downvote .. :) – PSL

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