私のコントローラ間でデータを共有しようとしています。私はC#の環境から来て、私はプライベートメンバーと、データの取得と操作/保存のためのいくつかのメソッドを含むクラスを作成することに慣れていました。ここで角度作成データホルダー/リポジトリ
は、私は心
public class MyRepository
{
private List<string> Items { get; set; }
public MyRepository()
{
Items = new List<string>();
}
public List<string> Get()
{
return Items;
}
public string GetById(int Id)
{
return Items[Id];
}
public void AddItem(string sNewItem)
{
Items.Add(sNewItem);
}
public void DeleteItems()
{
Items.Clear();
}
}
に持っているものの超簡単な例である今、戻っ角度に来て、私はいくつかの研究を行なったし、データを共有することができるようにするために(上記を作成することが判明しました私はService
と呼ばれるものを作成しなければなりません。さて、私はガイドに従って、このようなものを思いついた:
angular.module("IP-APP", ["ngRoute"])
.factory("Item", function() {
var savedItem = {};
function set(newItem) {
savedItem = newItem;
};
function get() {
return savedItem;
};
return {
set: set,
get: get
};
})
後で私のコントローラに注入することができます。 GetById
のような独自のメソッドを定義しようとするまで、これは完全に正常に動作します。突然Angularが返す.GetById is not a function
私の質問は、次のとおりです。 - すでに述べたように(GetByIdなどのカスタム関数を定義できる)リポジトリを作成することは可能ですか?はいの場合、それを正しく行う方法は?
この件に関するお手伝いは、それ以上の価値があります。
を参照してくださいあなたの答えをありがとう!あなたの鉱山ソリューションの違いは何ですか?私は工場を利用していますが、サービスを利用しています。 –
すべてのサービスはシングルトンです。アプリケーションごとに1回インスタンス化されます。それらは、プリミティブ、オブジェクトリテラル、関数、またはカスタムタイプのインスタンスであっても、どのようなタイプでもかまいません。 value、factory、service、constant、およびproviderメソッドはすべてプロバイダです。インジェクタは、サービスをインスタンス化する方法を教えます。その違いに加えて、 'getById'がどのように違うのか注意してください。配列を使用する場合は、キーを使用できます。 idが存在しない場合は、必ず正しい処理を追加してください。 –
それ以外にも、私があなたが投稿した問題の解決策を提供するために忙しかったので、私はあなたの更新された答えをまだ見ていませんでした。たぶんそれは便利です:) –