1

$timeoutを次の指令に挿入していますが、定義されていません。

次のコードは、コンソールに未定義を印刷し、例外TypeError:$タイムアウトが機能ではありません。

export default class foo { 
    constructor ($timeout) { 
     'ngInject'; 
     this.restrict = 'A'; 
     this.scope = {}; 
     this.$timeout = $timeout; 

     console.log($timeout); 
     $timeout(function() { 
      alert('timeout'); 
     }, 0); 
    } 

    link($scope, $element, $attrs, $ctrl) {  
     .... 
    } 

    // Create an instance so that we can access this inside link 
    static factory() { 
     foo.instance = new foo(); 
     return foo.instance; 
    } 
} 

答えて

1

私はこの問題は、あなたが単に-だろう注射したサービスのためのプレースホルダのようなとして機能しているパラメータ$timeoutを指定している、何もを注入していないということだと思います。

export default class foo { 
    constructor ($timeout) { 
     'ngInject'; 
     this.restrict = 'A'; 
     this.scope = {}; 
     this.$timeout = $timeout; 

     console.log($timeout); 
     $timeout(function() { 
      alert('timeout'); 
     }, 0); 
    } 

    link($scope, $element, $attrs, $ctrl) {  

    } 

    // Create an instance so that we can access this inside link 
    static factory() { 
     foo.instance = new foo(); 
     return foo.instance; 
    } 
} 

foo.$inject = ['$timeout']; 

もクラスdefintions別に注入を行うために行くいくつかの例here on the sitepoint siteがあります。以下のようにファイルの最後にfoo.$inject = ['$timeout'];を追加、修正します。

それともには(おそらく意図したとおりに)staticファクトリを通過、それはファイルの末尾にfoo.factory.$inject = ['$timeout']になり、あなたも取ると、注入されたサービスに渡すために、あなたの工場の機能を微調整する必要がありますあなたのため:

export default class foo { 
    constructor ($timeout) { 
     'ngInject'; 
     this.restrict = 'A'; 
     this.scope = {}; 
     this.$timeout = $timeout; 

     console.log($timeout); 
     $timeout(function() { 
      alert('timeout'); 
     }, 0); 
    } 

    link($scope, $element, $attrs, $ctrl) {  

    } 

    // Create an instance so that we can access this inside link 
    static factory($timeout) { 
     foo.instance = new foo($timeout); 
     return foo.instance; 
    } 
} 

foo.factory.$inject = ['$timeout']; 
関連する問題