Вопрос

У меня есть майнконтроллер и вложенная директива.Я смотрю на Этот пример , чтобы увидеть, какКоммуникационные работы между контроллерами и директивой, но моя не работает.

В основном я хочу вызвать функцию охвата основного контроллера из пользовательской директивы (кнопка пустой корзины).Смотрите пример Plunkr ниже.

plukr: http://plnkr.co/edit/82stlkkxbk6httnmnqlu?p=pReview

Всякий раз, когда я делаю console.log (область применения. $ prime ("optioncart ()")), это не определено по какой-то причине.

Примечание. Я пытаюсь избежать $ rootscope. Бруслыйaoadcast как можно больше ...

Это было полезно?

Решение

Вы используете область изолята для родительской директивы, поэтому дочерняя директива не имеет доступа к объему контроллера.

Для того, чтобы предоставить дочернюю директиву доступ к этой функции объема при сохранении выделения родителя, вы можете добавить эту функцию в качестве свойства scope: { ... } на родительской директиве:

scope: {
  ...
  emptyCart: '='
}
.

и установите имя функции в соответствующий атрибут в объявлении представления родительской директивы:

<div ... data-show="showPopup" empty-cart="emptyCart"></div>
.

Тогда вы можете пропустить все обходные пути, которые вы пытались использовать в своем поршене, и просто установил ng-click на дочернюю директиву, чтобы выстрелить функцию контроллера:

sHTML = "<button ... ng-click='emptyCart()'>Empty cart</button>";
.

демонстрация

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top