这似乎不起作用。是否可以将参数传递给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);
};
答案 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()
回调中,该回调将在加载数据时触发。