2016-07-18 3 views
1

Итак, в основном у меня есть приложение для викторины, которое работает с использованием углового, и я хочу подсчитать количество раз, когда вводится правильный ответ. Я уже сделал это так, чтобы слова «CORRECT» отображались вопросом, набирают ли они правильный ответ в текстовом поле, но я хочу посмотреть, сколько раз это происходит. Вот мой кодTally Up Количество находок в Angular

div ng-repeat="q in questions"> 
    <span>{{ q.question }}</span><br> 
    <input type="text" ng-model="q.ans" name="email" placeholder=""> 

    <div ng-show="q.ans===q.answer">CORRECT!</div> 

<div> 

так что в основном вопросы - это всего лишь массив с строкой ответа и строкой ответа. Я хочу увидеть в конце, сколько из них верное. Поэтому я думаю, что я добавил в правильное свойство объекты вопроса, которые имеют значение по умолчанию 0, что может означать неправильное, и изменить его право на 1.

Теперь, как я могу изменить его с html-страницы здесь, когда кто-то набирает правильный ответ? например, если правильно показано, если ng-show прав, то это значение будет 1, если нет, то оно будет 0.

благодарит за любую помощь. Интересно, могу ли я сделать это в режиме реального времени, вместо того, чтобы в конце нажать кнопку «Проверить».

EDIT: хорошо, я осматривал нг-если директива, будет ли это как-то можно добавить как

<div ng-if="q.ans===q.answer">{{ q.correct = 1 }} </div> 

или как-то выполнить, что q.correct = 1 (это означает, что ответ является правильным), если нг -f выполняется запуск блока?

ответ

1

Make a filter для подсчета правильных ответов

// app is your module 
app.filter('correctCount', function() { 
    return function(questions) { 
     return questions.reduce(function(count, q) { 
      return count + (q.ans === q.answer ? 1 : 0); 
     }, 0); 
    }; 
}) 

Затем вы можете отобразить общее количество в шаблоне

Total: {{questions | correctCount | number}} 

Demo ~ http://plnkr.co/edit/br3fxHQ8q04ajZj6Fxch?p=preview


Альтернативой reduce, которые могут быть легче понять ...

return questions.filter(function(q) { 
    return q.ans === q.answer; 
}).length; 
+0

thats фактически прекрасный спасибо. im все еще проходит логически, чтобы выяснить, как это работает. функция уменьшения просто выполняет обратный вызов в качестве параметра? – JimmySmithJR

+0

@ crooked91 здесь doco для 'reduce' ~ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – Phil

+0

быстрый вопрос, как получится, если я изменю q.ans просто в ans в модели и в фильтре, он больше не будет работать (вместо этого он просто показывает фильтр | угловой код – JimmySmithJR