2013-08-14 3 views
1

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

У меня есть список вложенных директив, которые я повторяю через ng-repeat. Шаблоны для этих директив довольно короткие, поэтому я смоделировал их в отдельные HTML-файлы и загружал их через templateUrl, но это, похоже, нарушает привязку данных.

Я воспроизвели проблему здесь: http://plnkr.co/edit/72HUb0vhtpYWuRHnlq3b?p=preview

HTML:

<div project-ext ng-repeat="project in projects"></div> 

project.html

{{project.name}} <button ng-click="projects.splice($index,1)">-</button><br> 
<div schedule-ext ng-repeat="schedule in project.schedules"></div> 

schedule.html

{{schedule.name}}<button ng-click="remove($index)">-</button> 

JS:

app.directive('projectExt', function() { 
    return { 
     templateUrl: 'project.html' 
    }; 
}); 

app.directive('scheduleExt', function() { 
    return { 
     templateUrl: 'schedule.html', 
     link: function(scope) { 
      scope.remove = function(i) { 
       scope.$parent.project.schedules.splice(i,1) 
      }; 
     } 
    }; 
}); 

Может кто-нибудь сказать мне, почему кнопка Открутить не работает во втором списке, когда все, что я сделал это изменить конструкцию директив от шаблона к templateUrl?

+2

Вы должны включить соответствующие примеры кода в вашем посте, чтобы вопрос самодостаточный. –

+0

Извините, очень сложно суммировать проблему, не видя плункера ... – Steve

+0

Совершенно нормально иметь плунж, но вы всегда должны включать соответствующий код в свой вопрос. –

ответ

5

Эта проблема, как представляется, связано с ошибкой сообщили в https://github.com/angular/angular.js/issues/2151

Чтобы обойти это, просто не ставьте ngRepeat и ваши директивы, которые используя templateUrl на одном элементе; вместо этого, поместите ngRepeat на обертке:

HTML:

<div ng-repeat="project in projects"><div project-ext></div></div> 

project.html

{{project.name}} <button ng-click="projects.splice($index,1)">-</button><br> 
<div ng-repeat="schedule in project.schedules"><div schedule-ext></div></div> 

Plunk: http://plnkr.co/edit/BapWX0LpqkcLFegq1fhU

+0

Это блестяще - спасибо за прояснение этого. Надеюсь, ошибка скоро будет исправлена. – Steve

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