/ / AngularJS - „Не се допускат дублирания в ретранслатор“ - javascript, angularjs, angularjs-ng-repeat

AngularJS - "Не се разрешава дублиране в повторител" - javascript, angularjs, angularjs-ng-repeat

Опитвам се да създам HTML textarea за всеки член на масив, но той не се изобразява. Прочетох документите на AngularJS и опитах различни track by изрази без резултат.

Условието за грешка възниква, ако потребителят въведе един и същ текст в множество textareas. Изглежда, че Angular използва стойността на текстовата област като уникален ключ. Бих могъл да хакна това, като добавя и премахвам произволен идентификатор преди текста, но това изглежда куцо.

За да бъде ясно извеждането на текстовите области, проблемът е след като потребителят щракне върху изпращане (само javascript - без двупосочно пътуване до сървър) и след това последващият код прави това, което потребителят е въвел.

Благодаря предварително.

Конкретната грешка, която получавам, е:

Duplicates in a repeater are not allowed.
Use "track by" expression to specify unique keys.
Repeater: openEndedQuestion in openEndedQuestions track by openEndedQuestion.id,
Duplicate key: undefined

HTML е:

<tr ng-repeat="openEndedQuestion in openEndedQuestions">
<td width="375" style="font-size: 18px;">
<b>{{openEndedQuestion}}</b><br>
<textarea id="openEndedAnswer_{{$index}}" cols="80"></textarea>
</td>
</tr>

Вторият етап на HTML е:

<tr ng-repeat="openEndedAnswer in openEndedAnswers">
<td width="375" style="font-size: 18px;">
<b>{{openEndedAnswer}}</b>
</td>

<td width="225">
<span style="font-size: 35px; padding: 2px; color: #468847;"
ng-repeat="starIndex in [0, 1, 2, 3, 4]"
ng-click="povStarTracker.setStarRating($parent.$index, starIndex + 1)"
ng-class="povStarTracker.getClassForStar($parent.$index, starIndex)"></span>
</td>
</tr>

Основният JSON е:

"openEndedQuestions" : [
"Do you think the coach is being fair?",
"Should the coach give all of his players a chance to play in the games?",
"Should Austin say anything about this to his coach?",
"What could Ryan say to Austin?"
]

Отговори:

5 за отговор № 1

Променете или добавете track by част от вашето ng-повторение

или използвате by $index или by openEndedQuestion

 <tr ng-repeat="oeq in openEndedQuestions track by oeq">

или

 <tr ng-repeat="oeq in openEndedQuestions track by $index">

По-добре да се използва втори случай

Също като общо правило, опитайте се да не се свързвате с примитиви в ъглови (т.е. низове и числа). По-добро решение би могло да бъде:

в контролера:

$scope.questions = [

{id:1, text: "Do you think the coach is being fair?"},
{id:2, text: "Should the coach give all of his players a chance to play in the games?"},
{id:3, text: "Should Austin say anything about this to his coach?"},
{id:4, text: "What could Ryan say to Austin?"}
]

и в шаблона:

 <tr ng-repeat="q in questions track by q.id">

Вижте jsfiddle: http://jsfiddle.net/vittore/V5n4t/