2015-05-03 3 views
3

Мне нужно получить доступ к переменной от ng-repeat внутри контроллера, который находится внутри ng-repeat, код представлен ниже. К сожалению, это не сработает для меня.AngularJS: контроллер внутри ng-repeat - как получить доступ к переменной

<div ng-controller="ParentCtrl"> 
    <div ng-repeat="r in results"> 
     <div ng-controller="SomeCtrl"> 
      <p>{{r.something}}</p> ($parent.r.something won't work either) 
     </div> 
    </div> 
</div> 

Возможно ли это? И если это возможно - как это сделать?

EDIT: Что мне нужно сделать нг-повторение в течение одного контроллера, чтобы сделать список доступных столов (в родительском контроллере я поиск, фильтры и т.д.), а затем, когда я нажимаю кнопку в выбранном строка списка (результаты), мне нужно принять ее (рядные) параметры и сделать что-то с ними INSIDE второй (дочерний?) контроллер.

+3

Так почему же контроллер внутри повтора? Может быть, вам нужна директива, а не контролер. –

+2

Лучше использовать директивы для таких вещей, как, например, вы предотвращаете ошибки и более чистый код. – Sn0opr

ответ

0

Используйте нг-повторить переменную ($ индекс) в HTML и вызвать функцию на контроллере

<div ng-repeat="r in results"> 
    <div ng-controller="SomeCtrl"> 
     <p>{{r.doSomething($index)}}</p> 
    </div> 
</div> 
0

нг-повтор должен быть вложен в нг-контроллера, если вы хотите получить доступ к переменным в нг -controller. Предположим, что у вас есть «результаты», определенные как объекты в SomeCtrl, вы сможете получить к нему доступ с помощью ng-repeat. Пример:

В ваши controllers.js

appControllers.controller('SomeCtrl', function(){ 
     $scope.results = someData; 
}); 

На ваш взгляд,

<div ng-controller="SomeCtrl"> 
    <div ng-repeat="r in results"> 
     <p>{{r.property}}</p> 
    </div> 
</div> 
+0

Как получить доступ к нему внутри контроллера, для прохождения результатов внутри контроллера –

0

Другим решением было бы использовать контроллер в качестве синтаксиса. Подробнее см. plunker.

<div ng-controller="ParentCtrl as parent"> 
    <div ng-repeat="r in parent.results"> 
     <div ng-controller="SomeCtrl as child"> 
      <p>{{child.something(r)}}</p> 
     </div> 
    </div> 
</div> 

Рекомендуемый способ связи через контроллер - через службы. Но в вашем случае я не уверен, что создание перекрестного сервиса решит что-нибудь. Было бы о чем подумать.

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