Я создал пользовательскую директиву («мастер») на основе плагина JQuery Steps. Но я сталкиваюсь с проблемами при использовании ngRepeat внутри моей директивы. Директива использует ngTransclude, поэтому я могу предоставить содержимое шагов внутри разметки страницы.
Я далеко не эксперт по Angular, но я могу найти, что это ошибка / freakacident в Angular, где ngRepeat используется внутри директивы с изолированной областью действия и включением. Как упоминалось здесь https://github.com/angular/angular.js/issues/7874 но я не могу заставить ни одно из предложений работать :\
Директива выглядит так:
Directives.wizard = ['$compile', function ($compile) {
return {
restrict: 'E',
scope: {
cancel: '&',
finish: '&',
stepChanged: '&'
},
template: '<div class="wizard" data-ng-transclude></div>',
replace: true,
transclude: true,
link: function ($scope, element, attrs, ctrl) {
// directive has to be wrapped in order to ngModel on sections to work with transclude: true
element.wrapInner('<div class="steps-wrapper">');
var opts = {
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
onCanceled: function (event, currentIndex) {
$scope.cancel();
},
onFinished: function (event, currentIndex) {
$scope.finish();
},
onStepChanged: function (event, currentIndex) {
$scope.stepChanged();
}
};
var stepsEl = element.children('.steps-wrapper').steps(opts);
// wrap 'n compile..
$compile(stepsEl)($scope);
}
};}];
разметка
<wizard>
<h3>Title</h3>
<section>
<p><DG:TextControl runat="server" Key="MineSuccesHistorier.Step1"/></p>
<input data-ng-model="$parent.newData.Title"></input> <!-- outputs array just fine -->
<!-- test stuff here -->
<!-- 1. regular ng-repeat - doesnt work (also tried with $parent.$parent which Batarang says is the correct path -->
<ul>
<li data-ng-repeat="item in $parent.newData.Competences">{{item.Title}}</li>
</ul>
<!-- 2. try with ng-init - doesnt work -->
<ul data-ng-init="comp = $parent.newData.Competences">
<li data-ng-repeat="item in comp">{{item.Title}}</li>
</ul>
</section>
<h3>Tab</h3>
<section>
<!-- next wizard tab here -->
</section>
How data is set in controller
$scope.newData = {
"Competences": [
{
"IsSelected": true,
"Title": "Hest"
},
{
"IsSelected": false,
"Title": "Kat"
},
{
"IsSelected": true,
"Title": "Ko"
},
{
"IsSelected": false,
"Title": "Ged"
}
],
"Id": "905c1285-d58b-4f65-8df5-52986c70a820",
"Situation": null,
"Title": null}
любые идеи высоко ценятся, заранее спасибо!
ОБНОВЛЕНИЕ 25/3: plnkr добавлен здесь http://plnkr.co/edit/kNl4UEoUa7zU4CgWaGSa?p=preview Когда я добавляю изолированную область в директиву, повторители перестают работать. Если я оставлю изолированную область, кажется, что ngRepeats компилируются несколько раз.
ОБНОВЛЕНИЕ 2 25/3: Добавлен новый plunkr с предложением компиляции Vinays - теперь ng-repeat компилируется только один раз. Но двусторонняя привязка с ngModel в области контроллера не работает http://plnkr.co/edit/TR3XxvV4IYI66h4pY5hx?p=preview