поэтому у меня проблема с директивой 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, и у меня есть доступ ко всем желаемым свойствам, я не могу использовать родительскую функцию.
Это мое решение вашей задачи:
Ввиду:
<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
}
}