【问题标题】:AngularJS directive fails when minifiedAngularJS 指令在缩小时失败
【发布时间】:2016-11-10 15:01:02
【问题描述】:

我在 Visual Studio 中使用了一个压缩插件,除了这一段 AngularJS 代码外,它大部分都可以工作

这是未缩小的代码:

var svgBuildInterface = angular.module("svgBuildInterface", []);

svgBuildInterface.directive('ngRightClick', function ($parse) {
    return function (scope, element, attrs) {
        var fn = $parse(attrs.ngRightClick);
        element.bind('contextmenu', function (event) {
            scope.$apply(function () {
                event.preventDefault();
                fn(scope, { $event: event });
            });
        });
    };
});

这是失败的漂亮打印的缩小代码:

svgBuildInterface = angular.module("svgBuildInterface", []);
svgBuildInterface.directive("ngRightClick", function(n) {
    return function(t, i, r) {
        var u = n(r.ngRightClick);
        i.bind("contextmenu", function(n) {
            t.$apply(function() {
                n.preventDefault();
                u(t, {
                    $event: n
                })
            })
        })
    }
});

我无法在缩小后的代码中设置断点来找出发生了什么,但是 angularJS 会抛出异常:

Error: [$injector:unpr] http://errors.angularjs.org/1.5.7/
$injector/unpr?p0=nProvider%20%3C-%20n%20%3C-%20ngRightClickDirective

【问题讨论】:

标签: angularjs bundling-and-minification


【解决方案1】:

像下面这样更改你的指令,当你想缩小你的 JS 时,在编写控制器或指令或 Angular js 的任何组件时需要遵循某些最佳实践。

其中之一是通过 [] 传递依赖注入

var svgBuildInterface = angular.module("svgBuildInterface", []);

svgBuildInterface.directive('ngRightClick',['$parse', function ($parse) {
    return function (scope, element, attrs) {
        var fn = $parse(attrs.ngRightClick);
        element.bind('contextmenu', function (event) {
            scope.$apply(function () {
                event.preventDefault();
                fn(scope, { $event: event });
            });
        });
    };
}]);

【讨论】:

  • 我只是想出了同样的事情,它奏效了。我之前没有注意到 $parse 是必须从角度引用而不是缩小的东西。
猜你喜欢
  • 1970-01-01
  • 2016-01-09
  • 2015-11-12
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多