2016-05-29 77 views
0

我想寫一個工廠,並在我的控制器的一個使用它的功能,但它給我一個錯誤:廠是不是在我的控制器

TypeError: wordsToTrain is not a function

我做我的控制器和工廠很簡單,但仍然不`噸明白爲什麼會出現這種情況:

angular.module('bananaApp') 
    .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) { 
    wordsToTrain(); 
    }]); 

angular.module('bananaApp') 
    .factory('wordsToTrain', function() { 
    return 3; 
    }); 
+0

在你的控制器wordsToTrain將等於3,這就是DI如何角工作 – csharpfolk

+0

這裏是什麼樣子的AngularJS DI很好的教程:HTTP:// henriquat.re/basics-of-angular/services-dependency-injection/services-and-dependency-injection-in-angularjs.html – csharpfolk

+0

您應該閱讀AngularJS的開發人員指南[服務](https://docs.angularjs。 org/guide/services)和[DI](https://docs.angularjs.org/guide/di)。 – ryeballar

回答

1

您試圖實例化一個值。您的工廠不會返回一個函數,而是返回一個值。

angular.module('bananaApp') 
    .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) { 
    console.log(wordsToTrain) //this would give you 3 not a function; 
    }]); 

angular.module('bananaApp') 
    .factory('wordsToTrain', function() { 
    return 3; 
    }); 

//返回一個函數

angular.module('bananaApp') 
    .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) { 
    console.log(wordsToTrain()) // this would give you 3 as well but this is a function; 
    }]); 

angular.module('bananaApp') 
    .factory('wordsToTrain', function() { 
    return function() { 
     return 3; 
    }); 
1

嘗試定義這樣的服務:

angular.module('bananaApp') 
    .factory('wordsToTrain', function() { 

    var wordsToTrain = {}; 

    wordsToTrain.getValue = function() { 
     return 3; 
    } 
    return wordsToTrain; 
    }); 

而且使用它像這樣的:

var value=wordsToTrain.getValue(); 
+0

您在工廠功能中缺少return wordsToTrain – csharpfolk

0

Factor會返回一個對象&您可以附加一個方法來這家工廠的功能。

旁邊註釋[] in angular.module。

模塊定義中的[]參數可用於定義相關模塊。如果沒有[]參數,則不會創建新模塊,而是檢索現有模塊。

angular.module('bananaApp',[]) 
     .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', 
        function ($scope, wordsToTrain) { 
     console.log(wordsToTrain.three()); 
     }]); 

    angular.module('bananaApp').factory('wordsToTrain', function() { 

     var _factory ={}; 
     _factory.three = function(){ 
     return 3; 
      } 
     return _factory; 
     }); 

Demo這裏

+0

您是對的。謝謝。 –