使用Angular随机化DOM元素

时间:2013-02-21 17:13:02

标签: angularjs

这似乎不起作用。是否可以将参数传递给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);
};

1 个答案:

答案 0 :(得分:1)

这不是真正的“角度方式”。

您不应该在控制器中进行任何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并从该方法返回一个promise。然后,您可以将随机化调用放入.then()回调中,该回调将在加载数据时触发。