Enquanto a maioria de vocês provavelmente familiarizado com a forma básica para configurar um provedor de simplesmente declarar a eles:
providers:
Angular de injeção de dependência oferece recursos mais avançados.
com o fornecedor de fábrica você pode configurar o Injector
para devolver um valor invocando uma função específica. Vejamos este exemplo.
providers: };
A propriedade configura o token que será usado na injeção de dependência e useFactory está a apontar para a função que será usada para retornar o valor desejado. A propriedade deps configura os tokens que serão passados à sua função de fábrica.quando usá-lo?
Fornecedor de fábrica pode ser muito útil quando você precisa criar um valor dependente dinamicamente, com base na informação que você não terá até o tempo de execução. Você pode tomar uma decisão informada sobre o valor a retornar com base em outros serviços e estado de Aplicação.exemplo:
vamos tentar adivinhar de que dispositivo móvel um usuário está logado. Vamos tentar usar informações como o Usuário-agente do navegador, largura do ecrã e altura do ecrã. Vamos definir três token que serão usados mais tarde para identificar o nome do dispositivo.
o InjectionToken
classe — cria um token que pode ser usado na injeção de dependência Angular. InjectionToken
é parametrizado no T
qual é o tipo de objeto que será retornado por Injector
. Isto proporciona um nível adicional de segurança do tipo.
providers: providers: providers:
Now we can come up with an algorithm to detect the device name based on the three tokens we defined above. Passamos uma função de seta para o useFactory que tem 3 dependências, a fim de resolver essas dependências, passamos em uma matriz de dependências (dep) com os tokens listados.
providers:
finalmente, consumiremos o nome do dispositivo no nosso componente Angular.
@Component({ selector: 'my-device-name')
export class DeviceName {
constructor(@Inject('DeviceName') private deviceName: string) {}}
o decorador de Parâmetros de injecção indica ao Angular DI que este parâmetro (deviceName) deve ser resolvido a partir de um token — DeviceName definido.só isso!Siga-me no Twitter # LanoTechno