2016-07-05 24 views
2

から工場にアクセスするために:私が使用しているリソースである私はjavascriptオブジェクト指向way.thisでこれを実装しているはどのように私はこのような<code>factory</code>持つコントローラ

rasm.factory('serviceUrl',[function(){ 
     function serviceUrl(){ 
      this.p = location.protocol; 
      this.h = getHost(); 
     } 
     serviceUrl.prototype.getServiceUrl = function(){ 
      return this.p +'//'+ this.h + '/services/' 
     } 
    }]) 

https://medium.com/opinionated-angularjs/angular-model-objects-with-javascript-classes-2e6a067c73bc#.du8tor7h2

私の問題はありますどのように私はこのコントローラgetServiceUrl機能にアクセスできますか?これも可能ですか?おかげでみんな

答えて

4

Dependency Injectionについて読んでください。その後

rasm.factory('serviceUrl',[function(){ 
    function serviceUrl(){ 
     this.p = location.protocol; 
     this.h = getHost(); 
    } 
    serviceUrl.prototype.getServiceUrl = function(){ 
     return this.p +'//'+ this.h + '/services/' 
    } 

    // This line has been added 
    return serviceUrl; 
}]); 

あなたのコントローラでそれを使用します:

myApp.controller('MyCtrl', ['$scope', 'serviceUrl', function($scope, serviceUrl) { 

    serviceUrl.getServiceUrl(); 
}]); 

更新

私はあなたがこのようなあなたの工場出荷時のコードを変更することをお勧め:あなたは、最初にその工場のコードを変更する必要が

+1

私はserviceUrlからオブジェクトを作成する必要があると思った。このように** var obj =新しいserviceUrl(); obj.getServiceUrl()** –

+0

Angularのファクトリは、アプリケーションのライフサイクル全体にわたって、Angularを意味するsingletonです(同じ名前(new serviceUrl))。内部的には一度しか使用されず、DIを使用して同じインスタンスが利用できます。 –

+1

実際にはそうではありませんが、angleはファクトリのNEWを呼び出すのではなく、結果を返す(キャッシュする)ときにのみレシピを実行します。この場合、私はサービスを使ってより適切だと思います。 – Karim

関連する問題