2015-12-03 49 views
2

* Note:代碼是用TypeScript編寫的,下面的代碼是編譯好的javascript - 如果需要,我可以提供TypeScript。Inline Annotations與AngularJs指令

我想用grunt-contrib-uglify(mangle:true,beautify:true)縮小一個名爲bundle.js的文件,它包含我們需要用於AngularJs應用程序的所有編譯TypeScript。當運行應用程序時,我遇到了錯誤「Unknown provider: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); } 
}; 
}]); 

現在,如果我刪除了「控制器」屬性,該指令不拋出一個異常,告訴我的鏈接屬性配置正確。 - 沒有人看到什麼不對勁

var experienceShareForm = (function() { 
function experienceShareForm($rootScope, $scope, shareFromEmailService) { 
    var _this = this; 
    this.$rootScope = $rootScope; 
    this.$scope = $scope; 
    this.shareFromEmailService = shareFromEmailService; 

}   

return experienceShareForm; 
})(); 

我茫然了可能是與代碼的問題:這裏是experienceShareForm對象由控制器屬性實例化?非常感謝。

+0

您可以將'ng-strict-di'添加到與您的'ng-app'相同的元素,以對任何有問題的代碼進行角度強制依賴注入和輸出控制檯警告。 – Claies

回答

2

你的控制器試圖使用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函數可以注入不同的參數,由您指定。

+0

做到了!非常感謝 – gyochum