Angular Underscore无法读取未定义的属性“find”

时间:2015-07-17 18:32:24

标签: javascript angularjs underscore.js

我正在尝试从json服务返回具有特定“ID”的对象。我可以在控制台日志中看到对象但是任何迭代或使用下划线_find的尝试都会给我“未定义”

mvn versions:resolve

给了我这个错误:

var metaresult = _.find($scope.results.results, function(rw){ return rw.id == $scope.answer1 });

这是我的工厂:

TypeError: Cannot read property 'find' of undefined
at k.$scope.metaResult (https://evening-taiga-2443.herokuapp.com/js/controllers/MainController.js:173:21) 

}]);

任何我的json结构:

 app.factory('results', ['$http', function($http) { 
  return $http.get('js/services/results.json') 
.success(function(data) { 
  return data; 
}) 
.error(function(err) { 
  return err; 
}); 
编辑:所以问题似乎是依赖性。我尝试使用ng-underscore而我正在加载如下:

{
"results": [
    {
        "id": "a" 
    },
              .... and so on

然后是app.js

<script src="js/ng-underscore.min.js"></script>

然后在我的控制器中

var app = angular.module("quizApp", ['720kb.socialshare', 'ngUnderscore']);

在控制台中输入“下划线”给我:

app.controller('MainController', ['$scope', 'quiz', 'results', function($scope, quiz, results, underscore)

编辑:想出来只需要使用lodash

3 个答案:

答案 0 :(得分:1)

var metaresult = _.find( ...
  

TypeError:无法读取未定义

的属性'find'

此错误意味着javascript不知道_是什么。 _未定义,当您执行_.find时,会生成错误。看来你没有正确加载库。请确保您已添加下划线js模块。加载下划线后,_将引用js模块,您将能够使用所有方法。

答案 1 :(得分:0)

_指的是lodashunderscore,它们都是javascript实用程序库。我建议您查看bower,它是前端库的包管理器,并确保您在项目中都有必要的文件,并且它们在HTML中被引用。

我个人建议您使用lodash而不是下划线,因为它基本上是drop in replacement and offers performance benefits。话虽如此,根据您在此处显示的代码,绝对没有理由使用角度模块包装器。只需下载lodash并将其包含在HTML中,即可在控制器内部使用,而无需担心任何模块依赖性或控制器注入。

答案 2 :(得分:0)

一旦正确加载libs,它应该是:

var metaresult = _.findWhere($scope.results.results, { id: $scope.answer1.id });

http://underscorejs.org/#findWhere