需要 angularjs-dragula 包时未加载 angularjs 指令

Posted

技术标签:

【中文标题】需要 angularjs-dragula 包时未加载 angularjs 指令【英文标题】:angularjs directive not being loaded when angularjs-dragula package is required 【发布时间】:2019-10-04 20:28:43 【问题描述】:

我正在将我们的 .NET Framework 项目迁移到 .NET Core。以及我们之前依赖 .NET Framework 中的 BundleTable 工具的地方。我们现在正在使用 webpack。

我有一个使用包“angularjs-dragula”的指令。 webpack入口定义如下

'bundles/grouping':
[
    "./Scripts/angularjs-dragula.js",
    "./App/components/grid.directive.js",
    "./App/components/inline-edit.directive.js",
    "./App/services/grouping.service.js",
    "./App/components/grouping/grouping.directive.js"
],

我将指令初始化如下:

(function () 
  angular.module('App').requires.push(angularDragula(angular));
    angular
      .module('App')
      .directive('appCustomGrouping', appCustomGrouping);

    appCustomGrouping.$inject = ['urlService', 'groupingService', 'dragulaService' ];

  function appCustomGrouping(urlService, groupingService, dragulaService) 
...

事实上,页面永远不会加载 grouping.directive。并且没有错误。除非我删除 webpack 入口点中的 dragula 文件。然后该指令将加载,但抱怨:

ReferenceError: angularDragula 未定义[了解更多]

我曾尝试依赖 webpack 来导入包,并将其从入口定义中删除。我将 angularjs-dragula 安装到我的 node_modules 中,并使用了

var angularDragula = require('angularjs-dragula');

(function () 
  angular.module('App').requires.push(angularDragula(angular));
    angular
      .module('App')
      .directive('appCustomGrouping', appCustomGrouping);

    appCustomGrouping.$inject = ['urlService', 'groupingService', 'dragulaService' ];

  function appCustomGrouping(urlService, groupingService, dragulaService) 
...

但是这会导致相同的行为。

angularjs-dragula 包可以工作,因为我们在迁移到 webpack 之前就使用了它。但是现在它似乎默默地失败了,并带着指令的其余部分?

如何开始诊断此问题?

【问题讨论】:

你怎么知道指令没有加载? 【参考方案1】:

AngularJS wrapper for Dragula 的不同寻常之处在于它在全局范围内放置了一个名为 angularDragula 的函数。当使用angular 作为参数调用该函数时,该函数将dragula 模块注册到AngularJS。它返回一个模块名称为“dragula”的字符串。

angularDragula(angular)
angular.module("app",["dragula"])
.run(function(dragulaService) 
  console.log(dragulaService);
)  
<script src="//unpkg.com/angular/angular.js"></script>
<script src="//unpkg.com/angularjs-dragula/dist/angularjs-dragula.js"></script>

<body ng-app="app">
    <h1>Hello AngularJS!</h1>
</body>

页面从不加载 grouping.directive

如何开始诊断此问题?

我会使用开发者控制台插入断点。然后检查变量。

上面的例子用 Dragula 加载 AngularJS 并成功记录了 dragularService。

【讨论】:

以上是关于需要 angularjs-dragula 包时未加载 angularjs 指令的主要内容,如果未能解决你的问题,请参考以下文章

发布新的 NPM 包时未找到 E404

打字稿。导入“模块/子目录”npm 包时未找到环境声明

登录时未通过凭据提供程序加载 KSP(密钥存储提供程序)

HiveSQL调优-最常用的调优方式

Mysql+php报错原因

删除具有未加载子实体的实体