2013-10-14 15 views
34

非常に新人っぽい質問:リソースサービスを使用するときにパラメータを渡す方法は?

私はファクトリメソッドを使用して、リソースオブジェクトを構築しようとしている:

.factory('Magazines', [function ($resource) { 

    var url = document.URL; 
    var urlArray = url.split("/"); 
    var organId = urlArray[urlArray.length-1]; 

    return $resource('http://localhost/ci/api/magazines/:id', { 
     loginID : organEntity, 
     password : organCommpassword, 
     id : organId 
    }); 
    }]) 

すべてのparamsは、事前に定義されており、organEntityとorganCommpasswordは、タグ内で定義されているので、この方法は簡単です。

異なるリソースオブジェクトの場合、ファクトリが呼び出されるときにパラメータを渡す必要があります。

.controller('ResrouceCtrl', function($scope, Magazines) { 
     $scope.magazines = Magazines.query(); 
}); 

私はquery()メソッドは、パラメータを追加することができます知っている:私はこのリソースオブジェクトの呼び出し元のコードは次のようになります想像

私はちょうどパラメータを渡す場合Magazines.query(params, successcb, errorcb);

を私は疑問に思う、することができます私は工場でパラメータを取得しますか?そのような渡されたパラメータをファクトリメソッドで指定する方法は?

たとえば、私は今urlからorgIdを取得できないと思いますが、コントローラから渡す必要があります。ファクトリメソッド内でorganIdを受け取る方法は?ここで


は、私のリソースのjsである:ここで

.factory('MagComments', function ($resource) { 


    return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { 
     loginID : organEntity, 
     password : organCommpassword, 
     id : '@magId' //pass in param using @ syntax 
    }); 
    }) 

は私のコントローラです:

$scope.magComments = MagComments.query({magId : 1}); 

私は、パラメータを渡すことを試みたが、それは私のエラー

+0

私はいくつかのコードをやっていることが参考になるかもしれないと少し混乱しています。なぜあなたはオルガナードをどこから入手したのですか?私は値を渡すだけです。あなたがすでに言ったように、コントローラがそれを呼び出すときにquery()メソッド。工場ではアプリケーションで一度しか呼び出されないので、「雑誌」はシングルトンです。 –

+0

私はコントローラから.query()を介してパラメータを渡すだけで工場で使用できますか? –

+0

私はあなたが工場が何をしているのか分かりません。ファクトリは、コンストラクタ関数の "Magazines"に依存して指定すると、コントローラに渡されるオブジェクトを作成します。したがって、あなたが返すリソースは*あなたのコントローラ内の* Magazinesであり、ドキュメントがそうするように動作します。または、私はあなたに見せることができる特定のコントローラに異なるデフォルトを使用したいと言っていますが、私はあなたの状況に対してうまく動作するはずです "params"でクエリを呼び出すと思うでしょう。 –

答えて

45

私は私があなたの見ると思います問題は、この方法で渡すパラメータを定義するために@構文を使用する必要があります。また、loginIDやパスワードが何をしているのか分からず、URLパラメータとして使用されていないようです彼らはセンされていますか?クエリパラメータとしてt?

これは私がこれまで見たものに基づいて提案することができるものである。

.factory('MagComments', function ($resource) { 
    return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { 
     loginID : organEntity, 
     password : organCommpassword, 
     id : '@magId' 
    }); 
    }) 

@magId文字列はあなたがパラメータとして渡すオブジェクトのプロパティmagId:idを置き換えるために、リソースを教えてくれます。

私はthe documentation here(これは少し不透明であることがわかります)を読み、最後に例を見てみると、これは多くの助けになるはずです。

+0

母親は、そのloginIDとパスワードを心配しないでください。それらは、HTMLで ''の中で定義されています。ありがとうございました!私はこの文書をもっと慎重に読むつもりです! –

+0

これはグローバル変数なのでしょうか? –

8

を引き起こしproviderを使用することをお勧めします。あなたが使用する前に、最初にそれを設定したいとき 提供が良いです(に対するサービス/工場)

のような何か:

.provider('Magazines', function() { 

    this.url = '/'; 
    this.urlArray = '/'; 
    this.organId = 'Default'; 

    this.$get = function() { 
     var url = this.url; 
     var urlArray = this.urlArray; 
     var organId = this.organId; 

     return { 
      invoke: function() { 
       return ...... 
      } 
     } 
    }; 

    this.setUrl = function(url) { 
     this.url = url; 
    }; 

    this.setUrlArray = function(urlArray) { 
     this.urlArray = urlArray; 
    }; 

    this.setOrganId = function(organId) { 
     this.organId = organId; 
    }; 
}); 

.config(function(MagazinesProvider){ 
    MagazinesProvider.setUrl('...'); 
    MagazinesProvider.setUrlArray('...'); 
    MagazinesProvider.setOrganId('...'); 
}); 

そして今コントローラ:

function MyCtrl($scope, Magazines) {   

     Magazines.invoke(); 

     .... 

} 
関連する問題