2015-03-20 1 views
0

У меня была идея для угловой директивы, но я не уверен, что это возможно.угловой доступ ng-repeat массив из дочерней директивы

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

$scope.remove = function(item) { 
    var index = $scope.items.indexOf(item); 
    $scope.items.splice(index, 1);  
} 

Я постоянно пишу этот котел код пластины для каждого нг-повтор, и было бы неплохо иметь возможность сделать что-то вроде этого, вместо:

<li ng-repeat="item in items"> 
    <button ng-click-remove="item"></button> 
</li> 

в основном я имею в виду директиву просто завернуть нг-клик, но потом я начинаю думать, это даже можно получить доступ к массиву элементов из моей директивы, не зная его имени или используя $ parent?

ответ

0

То, как я это делаю, это создать службу, обрабатывающую удаление/создание указанной задачи, а затем просто использовать эту оболочку в контроллере. Я имею в виду, как вы предлагаете, вам все равно нужно написать тот же код, но просто сделайте это в директиве. Кроме того, да, можно получить к нему доступ из директивы, вы можете передать ей контроллер.

function dir() { 
return { 
    controller: 'ctrl as ctrl', 
    link: function(scope, elem, attrs, ctrl){ 
     console.log(ctrl.items); 
     console.log(attrs.ngClickRemove); // gets the value of item. 
} 
} 
} 

Хотя я бы предупредил об использовании синтаксиса ng, поскольку он должен быть зарезервирован для Angularjs.

+0

код, который вы публикуете, основывается на знании имени массива «элементы». Как я уже упоминал, это неприемлемо, и ни одна из них не является сервисом для ввода в контроллер (который побеждает цель удаления такого кода с контроллера). Я ищу возможный эзотерический или угловой внутренний метод для доступа к «текущему итерационному массиву ng-repeat». Если такой метод не существует, то ответа на этот вопрос нет. – parliament

+0

Вы можете использовать тот факт, что у вас есть attrs.ngClickRemove, который даст вам значение элемента, и у вас есть доступ к области, поэтому, возможно, вы можете что-то там сделать. –

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