这并不是真正的“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()
加载数据时会触发的回调中。