*注意:代码是用TypeScript编写的,下面的代码是已编译的javascript - 如果需要,我可以提供TypeScript。
我正在尝试使用grunt-contrib-uglify(mangle:true,beautify:true)缩小名为bundle.js的文件,其中包含我们AngularJs应用程序所需的所有已编译的TypeScript。运行应用程序时,我遇到错误“未知提供者:bProvider< - b”,并且能够找到违规指令。
下面的指令没有内联注释,因此我更新了代码以使其具有:
appDirectives.directive('emailShareModal', ['$rootScope', '$compile', '$timeout', 'httpService', 'shareFromEmailService', function ($rootScope, $compile, $timeout, httpService, shareFromEmailService) {
return {
scope: {
type: '@type',
id: "=id",
defaultBody: "=body",
title: '@title'
},
link: function ($scope, element, attr) { return new emailShareModalDirective($scope, $rootScope, element, attr, $compile, $timeout, httpService); },
controller: function ($scope) { return new experienceShareForm($rootScope, $scope, shareFromEmailService); }
};
}]);
现在,如果我删除'controller'属性,该指令不会抛出异常,告诉我链接属性配置正确。以下是由控制器属性实例化的experienceShareForm对象:
var experienceShareForm = (function () {
function experienceShareForm($rootScope, $scope, shareFromEmailService) {
var _this = this;
this.$rootScope = $rootScope;
this.$scope = $scope;
this.shareFromEmailService = shareFromEmailService;
}
return experienceShareForm;
})();
我对代码可能出现的问题感到茫然 - 有人看到有什么不妥吗?非常感谢。
答案 0 :(得分:3)
您的控制器正在尝试使用DI,但您没有指定要注入的内容。缩小正在将$scope
更改为变量b
,例外情况是说找不到bProvider
。
更改以下内容:
controller: function ($scope) { return new experienceShareForm($rootScope, $scope, shareFromEmailService); }
以下内容:
controller: ['$scope', function ($scope) { return new experienceShareForm($rootScope, $scope, shareFromEmailService); }]
请注意,您不需要为link
函数执行此操作,因为始终使用相同的对象调用它。可以使用由您指定的不同参数注入controller
函数。