35

非常に初歩的な質問:

ファクトリ メソッドを使用してリソース オブジェクトを構築しようとしています。

.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
    });
  }])

すべてのパラメーターが事前定義されており、organEntity と organCommpassword がタグ内で定義されているため、この方法は簡単です。

別のリソース オブジェクトについては、ファクトリが呼び出されたときにパラメーターを渡す必要があります。

このリソース オブジェクトの呼び出しコードは次のようになると思います。

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

query() メソッドがパラメーターを追加できることを知っています:Magazines.query(params, successcb, errorcb);

パラメータを渡すだけなのかな、工場でパラメータを取得できますか? ファクトリメソッドで渡されたパラメータを指定する方法は?

たとえば、url から organId を取得できなくなったとします。コントローラーからそれを渡す必要があります。ファクトリ メソッド内で 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});

パラメータを渡そうとしましたが、エラーが発生します

4

2 に答える 2

47

私はあなたの問題を見ていると思います。@構文を使用して、この方法で渡すパラメーターを定義する必要があります。また、ログインIDまたはパスワードが何をしているのかわかりません。どこにも定義していないようで、使用されていませんURL パラメータとして送信されるので、クエリ パラメータとして送信されますか?

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

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

この文字列は、パラメータとして渡したオブジェクトのプロパティに@magId置き換えるようにリソースに指示します。:idmagId

ここのドキュメントをよく読んで(少し不透明であることはわかっています)、最後の方の例を見ることをお勧めします。これは大いに役立つはずです。

于 2013-10-14T22:20:34.580 に答える
8

を使用することをお勧めしますprovider。Provide は、(Service/Factory に対して) 使用する前に最初に構成する場合に適しています。

何かのようなもの:

.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();

       ....

}
于 2013-10-14T17:50:49.410 に答える