Javascript 角度下划线无法读取属性';查找';未定义的
我试图从json服务返回具有特定“ID”的对象。我可以在控制台日志中看到对象,但任何迭代或使用下划线的尝试都会导致“未定义” 给我这个错误:Javascript 角度下划线无法读取属性';查找';未定义的,javascript,angularjs,underscore.js,Javascript,Angularjs,Underscore.js,我试图从json服务返回具有特定“ID”的对象。我可以在控制台日志中看到对象,但任何迭代或使用下划线的尝试都会导致“未定义” 给我这个错误: TypeError: Cannot read property 'find' of undefined at k.$scope.metaResult (https://evening-taiga-2443.herokuapp.com/js/controllers/MainController.js:173:21) 这是我的工厂: app.factor
TypeError: Cannot read property 'find' of undefined
at k.$scope.metaResult (https://evening-taiga-2443.herokuapp.com/js/controllers/MainController.js:173:21)
这是我的工厂:
app.factory('results', ['$http', function($http) {
return $http.get('js/services/results.json')
.success(function(data) {
return data;
})
.error(function(err) {
return err;
});
}]))
任何我的json结构:
{
"results": [
{
"id": "a"
},
.... and so on
编辑:所以问题似乎是依赖性。我尝试改为使用ng下划线,加载方式如下:
<script src="js/ng-underscore.min.js"></script>
然后在我的控制器里
app.controller('MainController', ['$scope', 'quiz', 'results', function($scope, quiz, results, underscore)
在控制台中键入“下划线”会给我:
Uncaught ReferenceError: underscore is not defined
编辑:找到了,只需要使用lodash
var metaresult = _.find( ...
TypeError:无法读取未定义的属性“find”
var metaresult = _.find($scope.results.results, function(rw){ return rw.id == $scope.answer1 });
这个错误意味着javascript不知道什么是uu未定义,当您执行
\查找时,将生成错误。您似乎没有正确加载库。请确保您已添加下划线js模块。加载下划线后,\将引用js模块,您将能够使用所有方法 \指的是lodash
或下划线
,两者都是javascript实用程序库。我建议您看看bower,它是前端库的包管理器,确保您的项目中都有必要的文件,并且它们在HTML中被引用
我个人建议您使用lodash而不是下划线,因为它本质上是一种符号。也就是说,完全没有理由根据这里显示的代码在中使用angular模块包装器。只需下载lodash并将其包含在HTML中,就可以在控制器中使用它,而无需担心任何模块依赖关系或控制器注入。一旦正确加载LIB,它应该是:
var metaresult = _.findWhere($scope.results.results, { id: $scope.answer1.id });
-是否选中脚本中已包含下划线库?-是否在控制器依赖项中插入了下划线库?-你在用require吗?index.html和控制器可能有助于解决问题这不是数据的问题,而是浏览器无法在控制台中找到u,尝试写入u,您将得到错误,然后尝试$as(如果您添加了jquery)并返回对象。我尝试使用NG下划线,我正在加载脚本,如下所示:,我的应用程序是这样加载的:var app=angular.module(“quizApp”,“720kb.socialshare”,“ngUnderscore”);我的控制器将其命名为:app.controller('MainController',['$scope','quick','results',function($scope,quick,results,下划线),最后我将下划线命名为:下划线.find(…)。同样的错误。@KevinCompton更新了我的答案,我强烈建议您不要使用角下划线。它没有得到维护,lodash提供了性能改进。对不起,我只是在谷歌上搜索了角下划线,并假设您使用了角下划线表示歉意,但如果您对我的问题投了否决票,我会同意我也一样,谢谢
var metaresult = _.findWhere($scope.results.results, { id: $scope.answer1.id });