You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS directive经压缩后在服务端运行触发$injector异常问题求助

问题原因

AngularJS默认通过函数参数名匹配依赖项,代码压缩工具会将变量名压缩为e、a这类短名称,你注入的$compile被压缩后名称被修改,Angular无法找到对应的依赖,就会抛出$injector:unpr错误。
另外你当前的指令代码中完全没有使用注入的$compile服务,直接删除该注入参数也可以临时解决问题。

解决方案

有两种标准的压缩安全的依赖注入写法:

  • 第一种:使用数组形式声明依赖
app.directive('gwsRegex', ['$compile', function ($compile) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs, ngModelCtrl) {
            element.bind('keyup', () => {
                let _regex = new RegExp(attrs['gwsRegex']);
                var _value = element[0].value;
                if (_value.match(_regex)) {
                    element[0].value = _value.replace(_value.match(_regex)[0], '').trim()
                }
            });
        }
    };
}]);
  • 第二种:使用$inject属性显式声明依赖
// 先声明指令构造函数
function gwsRegexDirective($compile) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs, ngModelCtrl) {
            element.bind('keyup', () => {
                let _regex = new RegExp(attrs['gwsRegex']);
                var _value = element[0].value;
                if (_value.match(_regex)) {
                    element[0].value = _value.replace(_value.match(_regex)[0], '').trim()
                }
            });
        }
    };
}
// 显式标注依赖列表
gwsRegexDirective.$inject = ['$compile'];
app.directive('gwsRegex', gwsRegexDirective);

内容的提问来源于stack exchange,提问作者Slow Death

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:00