2014-09-05 41 views
0
是未定义

不要紧,当我把它在app.js文件,它不断变得不确定..收到错误:洗牌(...)在angularJS

app.js

(function() { 
var tkcApp = angular.module('TKC', []); 

var shuffle = function (o) { 
for (var j, x, i = o.length; i; j = parseInt(Math.random() * i), 
    x = o[--i], o[i] = o[j], o[j] = x); 
}; 
tkcApp.controller('ShuffleCtrl', function ($scope) { 
var quotes = [ 
"Whatever the mind of man can conceive and believe, it can achieve. –Napoleon Hill", 
"You miss 100% of the shots you don’t take. –Wayne Gretzky", 
]; 

$scope.getQuote = function() { 
    $scope.array = shuffle(quotes).slice(0, 1); 
    }; 
$scope.getQuote(); 
}) 
})(); 

鉴于

<div class="col-md-6" ng-controller="ShuffleCtrl" onload="getQuote()"> 
    <p ng-repeat="value in array">{{ value }}</p> 
</div> 

我已经把控制器作为我得到这个从表现,并用它作为$ scope.shuffle试过的例子之外,但我只是不工作。是的,我有身体ng-app =“TKC”

+0

for循环之后的逗号是什么? – epascarello 2014-09-05 12:30:04

+1

'shuffle'函数没有'return o'或类似的东西,但你试图分割它的结果。而'undefined'不喜欢切片。 ) – raina77ow 2014-09-05 12:30:58

+0

@epascarello不,这实际上是一个*高度增强的洗牌*。 – raina77ow 2014-09-05 12:31:43

回答

2

问题是,你在代码中使用的shuffle函数“in-place”操作 - 它会影响发送它的数组作为参数,不返回任何内容。然而你试图立即使用它的结果。

因此,无论添加到return o代码shuffle,或改变使用代码类似:

shuffle(quotes); 
$scope.array = quotes.slice(0, 1); 
+0

感谢您的意见,刚发布了答案,差不多就是这个结论。谢谢你的帮助! – 2014-09-05 12:56:22

0

我发现了来自同事的答案。 $ scope.array变空,因为shuffle没有返回值,所以把'return o'放在底部解决了这个问题。