2017-11-15 11 views
0

私はES6に準拠するように私たちのコードを書き直そうとしており、次の問題が発生しました。AngularJSプロバイダはES6関数宣言を受け入れません

angular.js:63 Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to: Error: [$injector:pget] Provider 'books' must define $get factory method.

これは、このコードにプロバイダオブジェクトを書き込むときです。私はこれにconst books =() => { ... }を変更

(() => { 
    const app = angular.module('app', []); 

    const books =() => { // Error is here 
     let includeVersionInTitle = false; 

     this.$get =() => { 
      const appName = "Book Logger"; 
      const appDesc = "Track which books you read."; 
      let version = "1.0"; 

      appName = (includeVersionInTitle) ? (appName += " " + version) : appName; 

      return { 
       appName: appName, 
       appDesc: appDesc 
      } 
     }; 

     this.setIncludeVersionInTitle = (value) => { 
      includeVersionInTitle = value; 
     }; 
    }; 

    app.provider("books", [books]); 
})(); 

const books = function() { ... }。それは動作し、そのエラーをスローしません。

私はconst a = function() { ... }const a =() => { ... }と同じことを考えましたか?なぜこのエラーが出るのですか?

+0

矢印機能は、コンストラクタではありません。それが呼び出されたときに、新しい "インスタンス"になることは決してありません。 – Bergi

+0

いいえ、それらは同じものではありません。重複を参照してください。 – Bergi

答えて

0

矢印機能には独自の「this」はありませんが、周囲のコードの機能を使用します。従来の関数を使用する必要があります。あなたがここに深く説明をチェックアウトすることができます

this.$get = function() { 

https://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/

+0

本質的に、 'global'オブジェクトではなく、' provider'ではなくメソッドを作成していますか?だからこそ、私は 'Provider 'の本は$ get factory methodを定義しなければなりません。 – JustinJmnz

関連する問題