Embora a Angular forneça muitos serviços úteis, em alguns aplicativos especiais, acharemos útil escrever serviços personalizados. Se quisermos fazer isso, primeiro precisamos registrar um método de fábrica de serviços no módulo, que pode ser passado diretamente através da API do módulo.Factory (http://docs.angularjs.org/api/angular.module) ou passou diretamente pela $ API (http:/docs.angularj.orgopi/apipiupiupi/1s).
Todos os serviços angulares estão envolvidos em di (//www.vevb.com/article/91775.htm), você pode se registrar com o nome (id) no sistema angular DI (injetor) ou declarar dependências de serviços existentes em outros métodos de fábrica.
1. Serviços de registro
Para registrar um serviço, devemos ter um módulo e fazer deste servidor parte deste módulo. Em seguida, podemos registrar o serviço através da API do módulo ou na função de configuração do módulo. O pseudo-código a seguir mostrará esses dois métodos de registro.
Use Angular.Module API:
var mymodule = angular.module ('mymodule', []); myModule.Factory ('ServiceId', function () {var SomeService; // Body Method Body, construir um retorno de serviço de serviço algo;});Use $ Fornecer serviço:
angular.module ('myModule', [], function ($ fornece) {$ fornece.Factory ('ServiceId', function () {var someService; // Body Method Body, construir um retorno de atendimento SomEService;});});Observe que não precisamos registrar uma instância de serviço; em vez disso, o método da fábrica será instanciado quando é chamado.
2. Dependências
O serviço não pode apenas ser dependente, mas também tem suas próprias dependências. As dependências podem ser especificadas nos parâmetros do método da fábrica. Leia (//www.vevb.com/article/91775.htm) Mais sobre DI no Angular, os usos das tags de matriz e o atributo $ injeção para tornar as declarações de DI mais concisas. (Leia mais sobre o DI em Angular e o uso da notação de matriz e a propriedade injeta para tornar a prova de minificação da anotação…)
Aqui está um exemplo de serviço muito simples. Este serviço depende do Serviço de Janela $ (passado pelos parâmetros do método da fábrica) e possui apenas um método. Esse serviço simplesmente armazena todas as notificações, após a terceira, esse serviço exibirá todas as notificações através do Window.Art.
<! Doctype html> <html lang = "zh-cn" ng-app = "mainApp"> <head> <meta charset = "utf-8"> <titter> Serviços </title> </head> <body> <div ng --controller = "myController"> <stpy type = "text>" text> text> text> <mex-mel ng-controller = "myController"> <stpi) " ng-click = "Savemsg ()"> Salvar msg </botão> <ul> <li ng-repeat = "msg em msgs"> {{msg}} </li> </ul> </div> <script src = "../ angular-1.1.js" type = "text/javScript"> angular.module ("mainApp", [], function ($ fornece) {$ fornece.factory ("notify", ["$ window", "$ timeout", function (win, timeout) {var msgs = []; retorna função (msg) {msgs.push (msg); if (msgs.length == 3) {timeout (timeout (timeout (timeout) (msgs.push (msg); if (msgs.length == 3) {timeout (timeout (timeout (timeout) (msgs.push); win.alert (msgs.Join ("/n")); App.Controller ("MyController", function ($ SCOPE, NOTIFY) {$ SCOPE.MSGS = []; $ SCOPE.SAVEMSG = function () {this.msgs.push (this.msg); notify (this.msg); this.msg = ";};}); </script>3. Serviços angulares instanciais
Todos os serviços em Angular são preguiçosamente instanciados. Isso significa que o serviço é criado apenas quando outros serviços instanciados ou componentes de aplicativos que dependem dele dependem. Em outras palavras, o Angular não instanciará o serviço até que o serviço seja solicitado direta ou indiretamente.
4. Serviços como singletons
Finalmente, devemos perceber que todos os serviços angulares são um aplicativo Singleton. Isso significa que cada injetor possui e apenas uma instância de um determinado serviço. Como o Angular é extremamente irritante para destruir o estado global, é viável criar vários injetores, para que cada um tenha uma instância de um serviço especificado. Exceto pela forte demanda nos testes, geralmente existem poucas necessidades.
O exposto acima são as informações sobre serviços angulares. Continuaremos a adicionar informações relevantes no futuro. Obrigado pelo seu apoio a este site!