【问题标题】:lodash properties cannot be read from angular controller无法从角度控制器读取 lodash 属性
【发布时间】:2016-02-04 21:17:19
【问题描述】:

我已经开始玩 loddash,并且我有一个小角度应用程序,我正试图开始工作。我已经看到了类似的 SO 问题和 underscorejs。但是看着答案,我无法加载它。

在我的 app.js 文件中,我创建了一个工厂来注册 '_' to window._

var app = angular.module("app", [])
.constant('_', window._);

app.factory('_', ['$window', function ($window) {
    return $window._;
}]);

在我的 html 中,我在 Angular 库之前加载了 lodash

<script src="scripts/lodash.js"></script>
<script src="scripts/angular.js"></script>
<script src="scripts/angular-loader.js"></script>
<script src="scripts/angular-animate.js"></script>

<script src="app/app.js"></script>
<script src="app/treeController.js"></script>
<script src="app/treeviewDirective.js"></script>

<script src="app/test.js"></script>

然后在控制器中我尝试注入 '_' 服务/工厂

app.controller("treeController", ['$scope',  function($scope, _) {
    var vm = this;
    function nestAssociation(node, oldCollection, newAggregates) {

        var array = [1];
        var other = _.concat(array, 2, [3], [[4]]);

        var selectedNode = node.parent;
        var itemIndex = _.findIndex(oldCollection.children, function (o) { return o.parent == selectedNode; });
        console.log(itemIndex);
    }

在函数nestAssociation() 内出现错误的页面构建和初始化良好。一旦调用第一个 lodash 函数_.concat,我就会收到一个错误TypeError: Cannot read property 'concat' of undefined,这表明应用程序无法访问 lodash 函数,我认为这是因为服务没有正确注册'_'

谁能告诉我我错过了什么?

提前致谢

【问题讨论】:

  • 不需要工厂和常量...使用其中一个

标签: javascript angularjs lodash


【解决方案1】:

我认为您的控制器声明中缺少 _ 引用?试试这个:

app.controller("treeController", ['$scope', '_',  function($scope, _) {
    var vm = this;
    function nestAssociation(node, oldCollection, newAggregates) {

        var array = [1];
        var other = _.concat(array, 2, [3], [[4]]);

        var selectedNode = node.parent;
        var itemIndex = _.findIndex(oldCollection.children, function (o) { return o.parent == selectedNode; });
        console.log(itemIndex);
    }

【讨论】:

  • 如果您在整个应用程序中将其注册为常量,也不确定是否需要依赖依赖注入声明的 _。不过我可能是错的。
  • 就是这样。你是对的,我删除了常量并将其作为服务保留。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2015-08-10
  • 1970-01-01
相关资源
最近更新 更多