2016-02-29 3 views
1

У меня есть json-файл с вопросами, поэтому массив. Я хочу, чтобы все вопросы были случайными. Это мой код из js-файла, но я не знаю, почему он не работает.Случайная функция в Angular JS

$http.get('quiz_data.json').then(function(quizData){ 
     $scope.myQuestions = quizData.data; 
     $scope.myQuestions = Math.floor(Math.random()*2); 
    }); 

И в HTML

<div ng-repeat="myQuestion in myQuestions"> <p class="txt">{{myQuestion.question}}</p></div>

+0

'$ scope.myQuestions' же имя? – Nirus

ответ

4

Использование:

$scope.randomQuestion= $scope.myQuestions[Math.floor(Math.random() * $scope.myQuestions.length)]; 

И в виду: {{randomQuestion}}

ОБНОВЛЕНИЕ:

$http.get('quiz_data.json').then(function(quizData){ 
     $scope.myQuestions = quizData.data; 
     $scope.randomQuestion= $scope.myQuestions[Math.floor(Math.random() * $scope.myQuestions.length)]; 
    }); 

HTML:

<div ng-repeat="myQuestion in myQuestions"> 
<p class="txt">{{randomQuestion.question}}</p></div>  

FINAL UPDATE:

Таким образом, фактический вопрос не рандомизации, а перетасовки вопросы:

в файле JS:

function shuffleArray(array) { 
    var m = array.length, 
     t, i; 

    // While there remain elements to shuffle 
    while (m) { 
     // Pick a remaining element… 
     i = Math.floor(Math.random() * m--); 

     // And swap it with the current element. 
     t = array[m]; 
     array[m] = array[i]; 
     array[i] = t; 
    } 

    return array; 
} 

// access the http service 
// quizData object = data from quiz_data.json 
$http.get('quiz_data.json').then(function(quizData) { 
    $scope.myQuestions = quizData.data; 
    $scope.totalQuestions = $scope.myQuestions.length; 
    shuffleArray($scope.myQuestions); 
}); 

Ваш HTML:

<div ng-repeat="myQuestion in myQuestions"> 
    <p class="txt">{{myQuestion.question}} </p> 
</div> 
+0

Я поставил это на мой взгляд, но не работает 'ng-repeat =" myQuestion in randomQuestion "' – dragon

+1

вы не повторяете в randomQuestion. вы просто показываете случайный вопрос. например: ng-repeat = "myQuestion in myQuestions", который повторит все ваши вопросы. если вы показываете {{myQuestion.question}}. просто замените это на {{randomQuestion}} –

+0

После того, как я заменил то, что вы сказали мне, на экране я получаю «{« вопрос »:« Сатурн виден с Земли без телескопа »}' вместо того, чтобы просто «Сатурн» виден с Земли без телескоп ". Что-то не так. Alex – dragon

1

Эта линия:

$scope.myQuestions = Math.floor(Math.random()*2); 

перезаписывает массив вопросов и превращает его в случайное число. Я думаю, что вы хотите получить доступ к нему как массив с таким номером, как так:

$http.get('quiz_data.json').then(function(quizData){ 
     $scope.myQuestions = quizData.data; 
     var randomNum = Math.floor(Math.random()*2); 
     console.log($scope.myQuestions[randomNum]); 
    }); 
+0

мы ответили на одно и то же, в то же время. Теперь я вижу это. Наш первоначальный ответ на самом деле тот же. Продолжайте хорошую работу. upvoted you :) –

+0

Спасибо! Несмотря на то, что у вас явно отличный ответ: p тоже поднял вас вверх – millerbr

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