2015-05-26 6 views
2

У меня есть нг-повтор и пользовательские директивы внутри него, к которой я пытаюсь передать «элемент» переменный из нг-повтора: передачи переменного нг-повтор в пользовательскую директиву

<li ng-repeat="item in list"> 
    <div custom-directive custom-data="item"></div> 
</li> 

И представьте себе фиктивную директиву:

angular.module('someModule').directive('customDirective', function() { 
    restrict: 'A', 
    scope: {customData: '@'}, 
    link: function(scope) { 
     console.log(scope.customData); 
    } 
}); 
  • Если я использую custom-data="item" затем CustomData внутри директивы равна строке «пункта».
  • Если я использую custom-data="{{item}}" затем CustomData внутри директивы является строковым представлением item объекта и ссылки на другие объекты внутри него потерян.

Вопрос: как я могу пройти item в форме объекта по моей директиве?

+3

изменить '' @ ''на'' = '' –

+0

Да, решил: D Спасибо –

ответ

1

Изменить «@» на «=» в вашем назначении области видимости, то он будет работать

angular.module('someModule').directive('customDirective', function() { 
    restrict: 'A', 
    scope: {customData: '='}, 
    link: function(scope) { 
     console.log(scope.customData); 
    } 
}); 
0

На самом деле вы можете использовать пользовательский фильтр в ng-repeat, как это.

<li ng-repeat="item in list | objectFilter"> 
    <div custom-directive custom-data="item"></div> 
</li> 

В контроллере, как этот

'use strict'; 
filters.filter("objectFilter",function(){ 
    return function(input){ 
     angular.forEach(input,function(key,val){ 
      if(typeof input[val].item == "string"){ 
       input[val].item = JSON.parse(input[val].item); 
      } 
     }) 
     return input; 
    } 
}); 

Так что вы получите новый набор элементов с каждым элементом в настоящее время отформатированный как объект.

И, наконец, вы должны изменить '@' на '='. Затем он отлично работает. Простое изменение '@' до '= 'не работает по вашему желанию.

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