2013-10-25 3 views
0

Я пишу обрезанный, чтобы оценить ответы пользователей. Если его ответ прав, то я добавлю правильный значок в конце. Я создал пользовательскую директиву для оценки ответа. Но я продолжаю сталкиваться с печально известной ошибкой : Достигнуты истребители 10 $ digest(). Aborting! ошибка.

Вот снимок моей частичной

<li ng-repeat="answer in practice.currentQuestion.answers" class="answer"> 
      <label class="radio multiple answer-body" evaluate-me is-correct="{'isCorrect': answer.isCorrect}" > 
       <div class="answer-body pull-left" ng-bind-html-unsafe="answer.body|removeemptyparagraphs"></div> 
      </label> 
    </li> 
</ul> 

и это моя директива,

app.directive('evaluateMe', function() { 
    return { 
     restrict : 'A', 
     scope:{ 
      answer: '=isCorrect' 
     }, 
     link : function(scope, element, attrs) { 
      var prepend; 
      console.log(scope.answer.isCorrect); 
      if(scope.answer.isCorrect){ 
       prepend = '<i class="student-sprite-1-right-icon-for-qus pull-right"></i>'; 
      }else{ 
       prepend = '<i class="student-sprite-1-cancel-icon-for-qus pull-right"></i>'; 
      } 
      element.append(prepend); 
     } 
    }; 
}); 

Это мое понимание того, что эта ошибка происходит, когда вы неправильно обновление модели из просмотра или в середине цикла. Но в этом случае я просто оцениваю модель. И самая прочная часть - выполнение директивы завершается и добавляет мою строку HTML внутри DOM. ошибка происходит после того, что (Пожалуйста, обратитесь к скриншоту)

enter image description here

ПРИМЕЧАНИЕ: Я сослался на другие должности, но я не в состоянии выяснить решения.

Пожалуйста, помогите мне с этой проблемой.

+0

может вы публикуете свой код в Fiddle/Plunker? –

ответ

2

Я не уверен, если это поможет (скрипка/звенеть будет полезно), но:

1) Вы добавляете ненужный сложности к переменной, переданной в директиве; попробуйте:

<label class="radio multiple answer-body" evaluate-me answer="answer"> 

и в коде:

scope:{ 
    answer: '=' 
}, 

Или, если вы хотите только передать isCorrect флаг:

<label class="radio multiple answer-body" evaluate-me is-correct="answer.isCorrect"> 

и в коде:

scope:{ 
    isCorrect: '=' 
}, 

Затем используйте scope.isCorrect напрямую.


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

app.directive('evaluateMe', function() { 
    return { 
     restrict : 'A', 
     template: 
      "<div>" + 
       "<div ng-transclude></div>" + 
       "<i ng-class=\"{" + 
        "'student-sprite-1-right-icon-for-qus': isCorrect, " + 
        "'student-sprite-1-cancel-icon-for-qus': !isCorrect" + 
       "}\" class=\"pull-right\"></i>" 
      "</div>", 
     transclude: true, 
     scope:{ 
      isCorrect: '=' 
     } 
    }; 
}); 

Используется как:

<label class="radio multiple answer-body" evaluate-me is-correct="answer.isCorrect"> 
    <div any content here-it will be transcluded></div> 
</label> 
+0

Transclude suggestuin работал как шарм. Огромное спасибо :) – skmvasu

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