使用AngularJs指令的内联注释

时间:2015-12-03 19:46:06

标签: angularjs

*注意:代码是用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;
})();

我对代码可能出现的问题感到茫然 - 有人看到有什么不妥吗?非常感谢。

1 个答案:

答案 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函数。