Angular Undercore无法读取属性'查找'的未定义

Angular Underscore Cannot read property 'find' of undefined

本文关键字:未定义 查找 属性 Undercore 读取 Angular      更新时间:2023-09-26

我正试图从json服务返回具有特定"ID"的对象。我可以在控制台日志中看到对象,但任何迭代或使用underline_find的尝试都会给我"未定义"的

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) 

这是我的工厂:

 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.js

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

然后在我的控制器

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

在控制台中键入"下划线"给了我:

Uncaught ReferenceError: underscore is not defined 

编辑:只需要使用lodash 就可以了

var metaresult = _.find( ...

TypeError:无法读取未定义的属性"find">

这个错误意味着javascript不知道什么是_._是未定义的,当您执行_.find时,将生成错误。您似乎没有正确加载库。请确保您已经添加了下划线js模块。一旦下划线被加载,_将引用js模块,您将能够使用所有方法。

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

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

http://underscorejs.org/#findWhere

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

我个人建议您使用lodash而不是下划线,因为它本质上是一种替代品,并提供了性能优势。也就是说,绝对没有理由根据您在这里显示的代码在中使用有角度的模块包装器。只需下载lodash并将其包含在HTML中,就可以在控制器中使用它,而不必担心任何模块依赖性或控制器注入。