1

これはうまくいかないようです。random() コールバックに引数を渡しても大丈夫ですか?

function getAnswers($scope){
    $scope.answers = conjugate("작다");
    $scope.$on('$viewContentLoaded', random($(".answer")));
} 

function random(r) {
    r.children().sort(function() {
        return (Math.round(Math.random()) - 0.5);
    }).appendTo(r);
};
4

1 に答える 1

1

これは、これを行うための「Angular の方法」ではありません。

DOM 操作を行ったり、コントローラーで DOM を参照したりすることは想定されていません。

代わりに、ビューに影響を与えるモデル データを操作する必要があります。あなたの場合、DOM要素自体をランダム化するのではなく、データの配列をランダム化します.:

function MyCtrl($scope) {
   $scope.answers = [ /*... some data here ... */];

   $scope.randomizeAnswers = function () {
      fisherYates($scope.answers);
   };

   //a good randomization function 
   //(see: http://stackoverflow.com/questions/2450954/how-to-randomize-a-javascript-array)
   function fisherYates ( myArray ) {
     var i = myArray.length, j, tempi, tempj;
     if ( i == 0 ) return false;
     while ( --i ) {
        j = Math.floor( Math.random() * ( i + 1 ) );
        tempi = myArray[i];
        tempj = myArray[j];
        myArray[i] = tempj;
        myArray[j] = tempi;
      }
   }
}

ここでは $on の使用はおそらく不要です。配列がロードされた後にランダム化したいだけのようですか? conjugate()それは、メソッドが世界で何をしているかに大きく依存します。

あなたのconjugate()メソッドが何をするのかわかりません...しかし、データを返すために何らかの非同期処理を行うと仮定する$qと、そのメソッドからプロミスを使用して返す必要があるかもしれません。.then()次に、ランダム化呼び出しを、データがロードされたときに発生するコールバックに入れることができます。

于 2013-02-21T18:07:36.787 に答える