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 回答