Angular に myApp モジュールをロードするように指示するのを忘れた場合、プロバイダー エラーが発生する可能性があります。たとえば、あなたの index.html ファイルにこれがありますか?:
<html ng-app="myApp">
サービスに「これ」がありません:
this.addNums = function(text) {
フィドル。
Angular コミュニティでは、service() と factory() をいつ使用するか、およびそれらを適切にコーディングする方法について、多くの混乱があるようです。だから、ここに私の簡単なチュートリアルがあります:
service() メソッドは、 JavaScript コンストラクター関数を想定しています。service() を使用する多くの Angular コード例には、コンストラクター関数ではないコードが含まれています。多くの場合、それらはオブジェクトを返しますが、これは service() を使用する目的に反するものです — これについては以下で詳しく説明します。オブジェクトを作成して返す必要がある場合は、代わりに factory() を使用できます。多くの場合、必要なのはコンストラクター関数だけであり、service() を使用できます。
以下の引用は、さまざまな AngularJS Google グループの投稿からのものです。
factory() と service() の使用の主な違いは、factory() はオブジェクトを返さなければならないのに対し、service() は何も返さず、オブジェクト コンストラクタ関数でなければならないことです。
提供している関数が必要なオブジェクトを構築する場合は、factory() を使用します。つまり、Angular は基本的に
obj = myFactory()
を実行して obj を取得します。提供する関数が必要なオブジェクトのコンストラクターである場合は、service() を使用します。つまり、Angular は基本的に
obj = new myService()
を実行
して、obj を取得/インスタンス化します。
そのため、人々が service() を使用し、そのコードがオブジェクトを「返す」場合、JavaScript の「new」が機能する方法のために、それは一種の無駄です: 、次に myService() で定義された関数を呼び出します。 -- 詳細はここではあまり気にしません)、しかし myService() で定義された関数は独自のオブジェクトを返すため、「new」は奇妙なことを行います:作成に時間が費やされたオブジェクトを破棄し、 myService() 関数が作成したオブジェクトを返すため、「無駄」になります。
service() が導入された理由の 1 つは、サービスを coffeescript クラスとして定義するなど、「古典的な」OO 手法を簡単に使用できるようにすることでした。
また、文書化されていないサービスの命名規則は、最初の文字を小文字にしたキャメルケースのようです: たとえば、myService.