2016-07-05 3 views
2

У меня есть factory вроде этого:Как получить доступ завода из контроллера

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

я реализовал это в JavaScript объектно-ориентированный way.this является ресурсом, который я использовал 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(); 
}]); 

Update

Я предлагаю вам изменить свой заводской код, как это:

rasm.factory('serviceUrl', [function() { 
    var _this = this; 

    _this.p = location.protocol; 
    _this.h = getHost(); 

    return { 
     getServiceUrl: function() { 
      return _this.p +'//'+ _this.h + '/services/' 
     } 
    } 
}]); 
+1

Я думал, что мне нужно создать объект из serviceUrl. например ** var obj = new serviceUrl(); obj.getServiceUrl() ** –

+0

Нет, заводы в Angular являются singleton на протяжении всего жизненного цикла вашего приложения, что означает, что Angular делает то же самое ('new serviceUrl') только один раз, а затем тот же экземпляр доступен везде, используя DI. –

+1

На самом деле это неправда, угловой не вызывает NEW для заводов, но только выполняет рецепт по мере его возвращения (и кэширования) результата. в этом случае я считаю более подходящим использование службы. – Karim

Смежные вопросы