【问题标题】:AngularJS: How to correctly pass in moment.js dependency?AngularJS:如何正确传递 moment.js 依赖项?
【发布时间】:2016-10-17 17:40:28
【问题描述】:

我有一个app.js,我在其中声明了我的应用变量/模块:

var myApp = angular.module('myApp', ['angularMoment']);

然后我让我的控制器与其他人一起传递引用并尝试进行moment() 调用:

myApp.controller('myComtroller', ['$scope', 'moment', function ($scope, $http, $timeout, moment) {
    var now = moment();
    console.log(now);
}]);

我的控制台出现错误,将其吐出:

TypeError: moment 不是函数

我不明白它为什么这样做。

在我身体的尽头,我有这个作为我的参考:

<script src="~/lib/angular/angular.min.js"></script>
<script src="~/js/moment.js"></script>
<script src="~/lib/angular-moment/angular-moment.min.js"></script>
<script src="~/js/app.js"></script>

按这个顺序。 (控制器稍后执行,该视图的部分脚本)

我通过从这里下载安装了moment.jshttp://momentjs.com/docs/

但是我通过bower安装了angular-moment依赖。

有什么建议吗?

【问题讨论】:

  • 你必须在 app.js 之前移动 moment.js 和 angular-moment.min.js
  • @123456789 我刚试过
  • @VolcovMeter 现在工作了吗?
  • @Sajeetharan 不,它不起作用。
  • 我不熟悉 angular-moment js 库,但 moment.js 库没有 angular 提供程序可以将 moment 注入控制器。它只是一个您可以调用的全局函数。所以从函数声明中删除moment,并为依赖注入删除inline array annotation。还要确保您的内联数组注释与您的函数声明匹配。

标签: angularjs momentjs angular-moment


【解决方案1】:

您的依赖项注释中缺少一些依赖项。

试试:

myApp.controller('myComtroller', [
         '$scope','$http', '$timeout', 'moment', 
function ($scope , $http ,  $timeout,   moment) {
    var now = moment();
    console.log(now);
}]);

另外,我建议使用ng-annotate 来自动处理 DI 注释。

【讨论】:

    【解决方案2】:

    angular-momentjs.jshttps://raw.githubusercontent.com/gdi2290/angular-momentjs/master/angular-momentjs.js

    加载脚本 angular-momentjs.js

    <script type="text/javascript" src="./angular-momentjs.js"></script>
    

    在 app 模块中注入依赖 angular-momentjs,在控制器中注入 $moment

    let app = angular.module('myApp', ['angular-momentjs']);
    app.controller('myCtrl', function($scope, $moment) {
       let nowISO = $moment().toISOString();
       console.log(nowISO);
    });
    

    【讨论】:

      【解决方案3】:

      你需要以正确的顺序传递依赖,

      myApp.controller('myComtroller', [
               '$scope','$http', '$timeout', 'moment', 
      function ($scope , $http ,  $timeout,   moment) {
          var now = moment();
          console.log(now);
      }]);
      

      你不需要将时刻服务作为依赖传递,你可以这样做,

      myapp.controller("myComtroller", function($scope) {
      $scope.date = moment();       
      });
      

      DEMO

      【讨论】:

      • @VolcovMeter 一些我认为没有理由的人。成功了吗?
      • @VolcovMeter 你不必通过时刻
      猜你喜欢
      • 2022-10-24
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2021-07-26
      • 2021-12-13
      • 2019-07-10
      相关资源
      最近更新 更多