Подтвердить что ты не робот

$ index of ngRepeat внутри директивы angularjs

Я пытаюсь найти лучший способ получить позицию индекса в ngRepeat, используемую с пользовательской директивой. Проблема, которую я пытаюсь решить, заключается в том, что для каждой итерации ngRepeat мне бы хотелось узнать, где я нахожусь на итерации, поэтому я могу создать собственный шаблон на основе этой позиции индекса.

Если нет лучшего способа сделать это, я пытаюсь сделать эту функциональность на основе этой документации из директив:

& или & attr - обеспечивает способ выполнения выражения в контексте родительской области. Если имя attr не указано, предполагается, что имя атрибута совпадает с локальным именем. Определенное и видимое определение области: {localFn: '& myAttr'}, затем изолировать свойство scope localFn будет указывать на оболочку функции для выражения count = count + value. Часто желательно передавать данные из изолированной области через выражение и в родительскую область, это можно сделать, передав карту локальных имен переменных и значений в оболочку выражения fn. Например, если выражение является приращением (суммой), мы можем указать значение суммы, вызвав localFn как localFn ({amount: 22}).

http://docs.angularjs.org/guide/directive

Мне сложно понять, что говорит это выражение. Итак, я попытался сделать это...

Сначала директива ngRepeat используется вместе с моей директивой в "testTemplate":

<ul>
   <li my-attr="test()" my-directive ng-repeat="value in values" class="span2">
   </li>
</ul>

Далее моя директива определила:

angular.module('myModule', [])
       .directive('myDirective', function() {
            return {
                replace : true,
                transclude : true,
                scope : {
                    test: '&myAttr'
                },
                templateUrl: 'partials/myTemplate.html',
                link : function(scope, element, attrs) {
                    alert(scope.count);
                }
            }
        });

Теперь, наконец, я пытаюсь определить функцию "test" в контроллере для родительского шаблона, на который ссылается директива.

function TestTemplateCtrl($scope, testTemplate) {
    $scope.test = function() {
        alert('in test');
        $scope.count = "1";
    }
}

Итак, первая проблема заключается в том, что моя "тестовая" функция в родительском объекте вообще не выполняется. Возможно, я не понимаю, как следует вызывать тестовую функцию в родительском контроллере. Теперь я еще не увеличился, но вернее ли это, если я смогу запустить тестовую функцию, чтобы увеличить огонь,

4b9b3361

Ответ 1

Вместо scope.$parent.$index вы можете рассмотреть возможность передачи $index в качестве атрибута директивы:

<li my-directive index="{{$index}}" ng-repeat="value in values">

Директива

myApp.directive('myDirective', function() {
    return {
        replace: true,
        // transclude: true,
        scope: {
            index: '@'
        },
        template: '<div>testing {{index}}</div>',
        link: function(scope, element, attrs) {
            // ...
        }
    }
});

Fiddle.

Ответ 2

Как вы указали, вы можете захватить индекс с помощью $index.

Как ваша тестовая функция не срабатывает, вы ее не выполнили. В вашей функции директивной ссылки вам нужно что-то вроде:

scope.$eval(attrs.myAttr);