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
相关产品推荐
相关产品推荐

