Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度下划线无法读取属性';查找';未定义的_Javascript_Angularjs_Underscore.js - Fatal编程技术网

Javascript 角度下划线无法读取属性';查找';未定义的

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

我试图从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.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 });