Передача функции в повторяющийся объект

0

поэтому у меня проблема с директивой ng-repeat. В моем коде у меня есть родительский контроллер, у которого есть данные, хранящиеся в виде массива объектов.

$scope.queue = [
  {
    name: 'Mark',
    sex: 'Male',
    age: 21
  },
  {...}
];

$scope.changePositionInQueue = function (currIndex, targetIndex) {
  // move up / down person in queue 
};

То, что я хочу сделать, - передать функцию родительского контроллера в мою выделенную область действия ("человек") и в то же время иметь возможность использовать переменные "$ index", "first", "$ last".

<person data-change-position="changePositionInQueue" data-person="person" ng-repeat="person in queue"></person>

Объявление области действия директивы:

scope: {
 person: '=',
 changePosition: '&'
}

Проблема в том, что когда я создаю изолированную область внутри цикла ng-repeat, я теряю свойства ng-repeat. С другой стороны, когда я создаю область по умолчанию ng-repeat, и у меня есть доступ ко всем желаемым свойствам, я не могу использовать родительскую функцию.

  • 0
    так что даже передавайте их в области видимости в качестве параметров вашей директиве области видимости
  • 0
    Спасибо за ответ, но как я могу это сделать? Передача параметров в виде person. $ Index или $ index дает мне «undefined» в директиве дочерней области.
Показать ещё 1 комментарий
Теги:
angularjs-scope
angularjs-directive
ng-repeat

1 ответ

0
Лучший ответ

Это мое решение вашей задачи:
Ввиду:

<my-directive dir-func="fnc($index)" data="data" ng-repeat="data in datas"><span>{{data.id|json}}</span><br></my-directive>

В Прямой вызов родительской функции в ссылке:

myApp.directive('myDirective', function() {
  return {
    //require: 'ngModle',
    scope: {
      data: "=",
      dirFunc: "&"
    },
    link: function(scope, elem, attr, ngModel) {
        scope.dirFunc() // parent scope.func is called here where you get the alert

    }

  }

Подробнее см. Plunker

  • 0
    Спасибо за Ваш ответ. Это не помогло мне напрямую, потому что я понял это, получив свойство $ index из области $ parent, но моя функция все еще не работала должным образом. Я нашел ошибку, посмотрев на вашу директиву. Я передавал функцию по ссылке в моей директиве, не давая информации об аргументах, которые она принимает. Проблема все равно решена, спасибо большое!
  • 0
    Рад, что помощь, цель примера для этого! :) Приветствие!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню