저는 많은 작업을 해왔고 Angular.js
전반적으로 흥미롭고 강력한 프레임 워크라고 생각합니다.
서비스 대 공장 대 공급자 대 가치에 대해 많은 논의가 있었음을 알고 있지만 여전히 a Factory
가 무엇인지 꽤 혼란 스럽습니다 .
Factory는 다른 StackOverflow 토론에서 다음과 같이 정의되었습니다.
공장
구문 : module.factory( 'factoryName', function );
결과 : factoryName을 주입 가능한 인수로 선언하면 module.factory에 전달 된 함수 참조를 호출하여 반환되는 값이 제공됩니다.
이 설명은 이해하기가 매우 어렵고 공장이 무엇인지에 대한 이해를 높이 지 않습니다.
a Factory
가 정확히 무엇 Service
이며 Provider
, 또는 기타 대신 사용해야하는 이유 에 대해 공유 할 수있는 설명이나 실제 사례가 있습니까?
최신 정보
A service
는 모든 객체에 대한 참조 를 보유 합니다 .
A factory
는 모든 객체 를 반환 하는 함수 입니다.
A provider
는 모든 함수 를 반환하는 함수입니다.
– 휴 –
답변
내가 이해하는 바에 따르면 그들은 모두 거의 동일합니다. 주요 차이점은 복잡성입니다. 공급자는 런타임에 구성 할 수 있고 공장은 좀 더 강력하며 서비스는 가장 간단한 형태입니다.
이 질문을 확인하십시오 AngularJS : 서비스 대 공급자 대 공장
또한이 요지 는 미묘한 차이를 이해하는 데 도움 이 될 수 있습니다.
출처 : https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc
jsFiddle : http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/
저자 : Pawel Kozlowski
var myApp = angular.module('myApp', []);
//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
this.sayHello = function() {
return "Hello, World!";
};
});
//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
return {
sayHello: function() {
return "Hello, World!";
}
};
});
//provider style, full blown, configurable version
myApp.provider('helloWorld', function() {
// In the provider function, you cannot inject any
// service or factory. This can only be done at the
// "$get" method.
this.name = 'Default';
this.$get = function() {
var name = this.name;
return {
sayHello: function() {
return "Hello, " + name + "!";
}
};
};
this.setName = function(name) {
this.name = name;
};
});
//hey, we can configure a provider!
myApp.config(function(helloWorldProvider){
helloWorldProvider.setName('World');
});
function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {
$scope.hellos = [
helloWorld.sayHello(),
helloWorldFromFactory.sayHello(),
helloWorldFromService.sayHello()];
}
답변
한 가지 주요 차이점은 공장에서 사용자 지정 코드를 실행할 수 있다는 것입니다. 그러나 서비스에서는 객체 생성 만 발생합니다.
myJs.factory('Factory', function() {
//Write custom code here
return {
Hello: function() {
return "Hello, World!"
}
};
});
답변
이 주제에 대한 나의 2 센트. 저는 매우 초보이며 Angular JS를 이해하는 데 관심이 많았습니다. 이것은 저를 많이 혼란스럽게 만든 것 중 하나 였기 때문에 다소 자세히 연구했습니다. 나는 인터뷰를 위해 메모를 해왔고 이것은 다른 사람들에게 유용 할 수 있습니다.
- 서비스와 공장은 다른 방식으로 같은 일을합니다.
- 둘 다 주사제입니다
- 대부분의 경우 팩토리 구문을 사용합니다.
- 이해하기 쉬움
- 요즘 es6 “service”는 es6 클래스로 더 잘 변환되기 때문에 수행됩니다.
- 본질적으로 컨트롤러에서 비즈니스 로직을 추상화
- 컨트롤러와 함께 비즈 로직을 사용하는 경우 컨트롤러에서만 사용할 수 있습니다.
- 컨트롤러는 긴 비즈니스 로직을 처리하지 않고 범위에 데이터를 넣는 것입니다
- 따라서 위의 시나리오에서 발생하는 것은 복잡한 비즈니스 로직이 컨트롤러에 묶여 있다는 것입니다. 데이터 처리 용이 아닙니다. 따라서 서비스 또는 공장에 일부를 배치하십시오. 따라서 코드는 간결하고 모듈 식입니다.
- 서비스는 싱글 톤입니다
답변
서비스는 대부분 개체의 생성자 클래스를 설명하는 개체입니다. 프레임 워크 내 깊숙한 곳에서 Object.create () 함수가 호출 된 다음 컨트롤러를 사용하여 해당 객체와 메서드를 호출하여 서비스를 사용할 수 있습니다. 반면에 Factory는 기본적으로 개체를 생성하지 않으므로 모든 속성과 메서드를 정의한 후에는 전체 개체 위치를 반환해야합니다.