2017-01-23 3 views
1

Я создаю динамическое меню с шаблоном действия ng-click, настроенным в DB.Угловой 1.5.8 Компонент, получить родительский контекст в ng-repeat

<ul class="dropdown-menu dropdown-menu-right" id="widget-{{$ctrl.id}}-context-menu"> 
    <li ng-repeat="Menu in $ctrl.menu"> 
     <a href="" ng-click="$parent.evaluateFn(Menu.Template)">{{Menu.Name}}</a> 
    </li> 
</ul> 
  1. Как я могу получить ссылку на родительский контекст с нг-повтора, так что я могу разобрать строку шаблона (например, «$ ctrl.handleClick (» ABC «)»), чтобы сделать событие щелчка ? $ parent и $ ctrl не работают внутри ng-repeat.
  2. Каков правильный способ преобразования строки в событие ng-click? Что я должен делать в

ответ

0

The $scope с компонентами всегда изолированы, я не уверен, что вы можете получить доступ к его таким образом, и вы не должны. Что вам нужно сделать, это связать функцию с вашим родительским контроллером/компонентом.

Bind функции от родителя: ($ctrl является родительским здесь)

<my-component action="$ctrl.evaluateFn"> 

Добавить связывание компонента:

bindings: { 
    action: '&' 
} 

использовать его в разметке:

<ul class="dropdown-menu dropdown-menu-right" id="widget-{{$ctrl.id}}-context-menu"> 
    <li ng-repeat="Menu in $ctrl.menu"> 
     <a href="" ng-click="$ctrl.action(Menu.Template)">{{Menu.Name}}</a> 
    </li> 
</ul> 

Вы можете использовать все, что хотите, вместо action.

https://docs.angularjs.org/guide/component

+0

Здесь нг-клик = «$ ctrl.action (Menu.Template)» не будет работать для меня, потому что мне просто нужно вызвать функцию в контроллере компонента, а не функция на странице, где компонент потребляется. Проблема в том, что ng-repeat создает другой контекст в своем блоке, и я не могу использовать «$ ctrl» для ссылки на контроллер. Я попробовал «$ parent», но не работал. –

+0

Вы можете использовать '$ ctrl' внутри' ng-repeat'. Если это не сработает, у вас возникнут другие проблемы. Предоставьте код, пожалуйста. – kuhnroyal

+0

Спасибо. Это была моя ошибка. $ ctrl теперь работает. –