2016-10-11 3 views
0

сомнения о ДИ на заводе ресурса:

AFAIK ниже образца является рекомендуемым способом, чтобы придать зависимостей в Angular1:

angular.module('myApp').factory('Resource', Resource); 

Resource.$inject = ['$resource', 'CONSTANTS']; 

function Resource($resource, CONSTANTS) { 
    return $resource(CONSTANTS.server_url + '/resource/:id'); 
} 

Но у меня возникают проблемы использовать его в сочетании с новым ключевым словом в моем контроллере:

var resource = new Resource(); 

Это приводит к ошибке, что CONSTANTS не определено. Используя синтаксис ниже, он работает нормально.

angular.module('myApp').factory('Resource', ['$resource', 'CONSTANTS', function($resource, CONSTANTS) { 
    return $resource(CONSTANTS.server_url + '/resource/:id'); 
}]); 

Почему это происходит?

+0

Почему вы создаете экземпляр 'Resource' самостоятельно, используя' new'? Предполагается, что вы его вводили в контроллер. – deceze

+0

Я на самом деле вводил его на свой контроллер и создавал его с помощью нового ключевого слова, чтобы использовать его методы, такие как $ save. В документации упоминается это как возможный способ получить объект из его типа. –

+0

Тогда вам нужно будет показать, как вы впрыскиваете его точно ... – deceze

ответ

0

Угловая система инъекций работает только в том случае, если вы используете систему впрыска Angular. Делая new Resource(), вы создаете простой Javascript «class» самостоятельно, используя простой Javascript; $inject Недвижимость на Resource не волшебным образом ничего в этом случае.

Что вы делаете с module(..).factory('Resource', ..), является определение 'Resource' в качестве инъекционной зависимости. Теперь вы должны использовать это как зависимость для своего контроллера, а Angular будет работать с системой впрыска:

module(..).controller('MyController', ['Resource', function (Resource) { 
    Resource.get(...) 
}]); 
Смежные вопросы