mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 15:40:22 +00:00
60 lines
3 KiB
Text
60 lines
3 KiB
Text
@ngdoc overview
|
|
@name Developer Guide: Angular Services: Understanding Angular Services
|
|
@description
|
|
|
|
## What are Angular Services?
|
|
|
|
Angular services are singletons objects or functions that carry out specific tasks common to web apps.
|
|
Angular has a number of built in services, such as the {@link api/ng.$http $http service}, which
|
|
provides access to the browser's `XMLHttpRequest` object for making requests to a server. Like other core
|
|
Angular variables and identifiers, the built-in services always start with `$` (such as `$http` mentioned
|
|
above). You can also create your own custom services.
|
|
|
|
## Using a Service
|
|
|
|
To use an Angular service, you identify it as a dependency for the component (controller, service,
|
|
filter or directive) that depends on the service. Angular's dependency injection subsystem takes
|
|
care of the rest. The Angular injector subsystem is in charge of service instantiation, resolution
|
|
of dependencies, and provision of dependencies to components as requested.
|
|
|
|
Angular injects dependencies using
|
|
{@link http://misko.hevery.com/2009/02/19/constructor-injection-vs-setter-injection/ "constructor" injection}.
|
|
The dependency is passed to the component's factory/constructor function. Because JavaScript is a dynamically
|
|
typed language, Angular's dependency injection subsystem cannot use static types to identify service
|
|
dependencies. For this reason a component must, explicitly, define its dependencies by using one of the
|
|
{@link di injection annotation} methods. For example, by providing a `$inject` property:
|
|
|
|
var MyController = function($location) { ... };
|
|
MyController.$inject = ['$location'];
|
|
myModule.controller('MyController', MyController);
|
|
|
|
Or by providing an "inline" injection annotation:
|
|
|
|
var myService = function($http) { ... };
|
|
myModule.factory('myService', ['$http', myService]);
|
|
|
|
## Defining a Service
|
|
|
|
Application developers are free to define their own services by registering their name, and **service
|
|
factory function**, in Angular modules.
|
|
|
|
The purpose of the **service factory function** is to generate the single object, or function, that
|
|
represents the service to the rest of the application. That object, or function, will then be
|
|
injected into any component (controller, service, filter or directive) that specifies a dependency
|
|
on the service.
|
|
|
|
Angular factory functions are executed lazily. That is, they are only executed when needed
|
|
to satisfy a dependency, and are then executed exactly once for each service. Everything that is
|
|
dependent on this service gets a reference to the single instance generated by the service factory.
|
|
|
|
## Related Topics
|
|
|
|
* {@link di About Angular Dependency Injection}
|
|
* {@link dev_guide.services.creating_services Creating Angular Services}
|
|
* {@link dev_guide.services.managing_dependencies Managing Service Dependencies}
|
|
* {@link dev_guide.services.testing_services Testing Angular Services}
|
|
|
|
## Related API
|
|
|
|
* {@link api/ng Angular Service API}
|
|
* {@link api/angular.injector Injector API}
|