【问题标题】:Error: _.get is not a function错误:_.get 不是函数
【发布时间】:2016-04-23 21:22:37
【问题描述】:

我正在尝试将angular-timezone-selector [on Github] 实施到我现有的 Angular 项目中。

我创建了一个解耦的working plunker here

当我尝试将它实施到我的项目中时,我收到以下错误:

Error: _.get is not a function

这些是我的依赖项:

var app = angular.module('app',
  [
    'ngSanitize',
    'ui.router',
    'ui.bootstrap',
    'pascalprecht.translate',
    'tmh.dynamicLocale',
    'ngCookies',
    'angular-loading-bar',
    'google.places',
    'LocalStorageModule',
    'angular-timezone-selector'
  ]
);

这是我加载到我的 html 中的内容:

  <!-- jQuery first -->
  <script src="assets/bower_components/jquery/dist/jquery.min.js"></script>
  <script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
  <script src="assets/bower_components/moment/moment.js"></script>
  <script src="assets/bower_components/moment-timezone/builds/moment-timezone-with-data.js"></script>
  <script src="assets/bower_components/chosen/chosen.jquery.min.js"></script>
  <script src="assets/bower_components/lodash/lodash.min.js"></script>

  <!-- Angular specific scripts -->
  <script src="assets/bower_components/angular/angular.js"></script>
  <script src="assets/bower_components/angular-cookies/angular-cookies.js"></script>
  <script src="assets/bower_components/angular-sanitize/angular-sanitize.js"></script>
  <script src="assets/bower_components/underscore/underscore.js"></script>
  <script src="assets/bower_components/angular-resource/angular-resource.js"></script>
  <script src="assets/bower_components/angular-local-storage/dist/angular-local-storage.js"></script>
  <script src="assets/bower_components/angular-ui-router/release/angular-ui-router.js"></script>
  <script src="assets/bower_components/angular-ui-bootstrap-bower/ui-bootstrap-tpls.js"></script>
  <script src="assets/bower_components/angular-translate/angular-translate.js"></script>
  <script src="assets/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js"></script>
  <script src="assets/bower_components/angular-dynamic-locale/dist/tmhDynamicLocale.js"></script>
  <script src="assets/bower_components/angular-loading-bar/build/loading-bar.js"></script>
  <script src="assets/bower_components/angular-google-places-autocomplete/src/autocomplete.js"></script>
  <script src="assets/bower_components/angular-timezone-selector/angular-timezone-selector.js"></script>
  <script src="scripts/app.js"></script>

...

这是我的 bower.json 文件的一部分,它提供了我的资产:

...
    "moment": "2.11.1",
    "moment-timezone": "0.5.0",
    "chosen": "1.4.2",
    "lodash": "3.9.3",
    "angular-timezone-selector": "1.4.3"
...

也许这是一个 lodash 错误。我该如何解决这个问题?

【问题讨论】:

    标签: javascript angularjs lodash


    【解决方案1】:

    请检查您是否使用“_”作为某些组件(工厂、值...等)的名称,因为 angular-timezone-selector 使用该名称创建常量: https://github.com/mishguruorg/angular-timezone-selector/blob/master/dist/angular-timezone-selector.js#L14

    希望能帮到你。

    【讨论】:

    • 啊,所以它与 lodash 冲突。两者都使用 _ ,时区必须重新定义 lodash 以便 _ 不再是 lodash。需要确保其中一个被定义为其他东西。
    • @danday74 我该怎么做?
    • 假设您只在 Angular 代码中使用 lodash,您可以将其定义为 ... angular.module('lodash', []).factory('WHAT_YOU_WANT_TO_CALL_LODASH', ['$window' , 函数 ($window) { return $window._; }]);
    【解决方案2】:
      angular.module('lodash', []).factory('_', ['$window', function ($window) {
        return $window._;
      }]);
    
      angular.module('yourApp', [
        // angular
        'ngAnimate',
        'ngCookies',
        // angular ui
        'ui.router',
        'ui.bootstrap',
        'ui.validate',
        // third party
         'angular-loading-bar',
        'lodash'
      ]);
    

    然后将其注入您的服务或控制器。

    【讨论】:

    • 这有什么帮助?
    • _.get 是一个 lodash 函数,您的设置不会将其识别为函数。您需要正确加载 lodash,角度方式。
    • 有效。 underscore.js 和 lodash.js 也有问题。遇到麻烦时,重要的是要握住哪个拳头 _
    猜你喜欢
    • 2018-06-10
    • 2013-02-24
    • 2023-02-01
    • 1970-01-01
    • 2017-10-23
    • 2013-01-04
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多