2015-11-02 62 views
2

我在angular-formly網站上給出了重複部分的示例。在我的app.config我創建一個新的類型是這樣的:Angular-Formly自定義類型控制器在部署時失敗

var unique = 1; 

formlyConfigProvider.setType({ 
    name: 'repeatSection', 
    templateUrl: 'app/rawMaterial/repeatSection.html', 
    controller: function($scope) { 
    $scope.formOptions = {formState: $scope.formState}; 
    $scope.addNew = addNew; 

    $scope.copyFields = copyFields; 


    function copyFields(fields) { 
     fields = angular.copy(fields); 
     addRandomIds(fields); 
     return fields; 
    } 

    function addNew() { 
     $scope.model[$scope.options.key] = $scope.model[$scope.options.key] || []; 
     var repeatsection = $scope.model[$scope.options.key]; 
     var lastSection = repeatsection[repeatsection.length - 1]; 
     var newsection = {}; 
     if (lastSection) { 
     newsection = angular.copy(lastSection); 
     } 
     repeatsection.push(newsection); 
    } 

    function addRandomIds(fields) { 
     unique++; 
     angular.forEach(fields, function(field, index) { 
     if (field.fieldGroup) { 
      addRandomIds(field.fieldGroup); 
      return; // fieldGroups don't need an ID 
     } 

     if (field.templateOptions && field.templateOptions.fields) { 
      addRandomIds(field.templateOptions.fields); 
     } 

     field.id = field.id || (field.key + '_' + index + '_' + unique + getRandomInt(0, 9999)); 
     }); 
    } 

    function getRandomInt(min, max) { 
     return Math.floor(Math.random() * (max - min)) + min; 
    } 
    } 

    }); 

一切正常,我的本地機器上,但是當我部署到Heroku的我得到以下錯誤:

Error: [$injector:unpr] Unknown provider: aProvider <- a 

如果我從類型定義中刪除controller:部分,錯誤消失。留下controller:定義但註釋掉它的所有內容仍會引發錯誤。

我正在使用帶缺省Grunt任務的angular-fullstack yeoman generator。

+1

看起來像一個代碼縮小的問題。確保您的注射簽名是最安全的 – scniro

回答

3

如果您根據預期的服務a發出錯誤,這是AngularJS生態系統中的縮小效應。我懷疑$scope縮小時正在轉換爲a。要保存$scope,請使用「最小安全」注射特徵來定義您的控制器。有多種方法可以做到這一點,但這是一種常見模式。遵守以下...

controller: ['$scope', function($scope) { 
    /* ... */ 
}]) 

JSFiddle Link - 簡單的演示重現錯誤

+0

謝謝你花時間回答。我將我的控制器定義更新爲最小安全模式,並且它正在工作! – bodagetta