我正在尝试从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
答案 0 :(得分:1)
var metaresult = _.find( ...
TypeError:无法读取未定义
的属性'find'
此错误意味着javascript不知道_是什么。 _未定义,当您执行_.find
时,会生成错误。看来你没有正确加载库。请确保您已添加下划线js模块。加载下划线后,_将引用js模块,您将能够使用所有方法。
答案 1 :(得分:0)
_指的是lodash
或underscore
,它们都是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 });