Tengo un problema al cargar una clase en un componente angular. He estado tratando de resolverlo por mucho tiempo; Incluso he intentado unirlo todo en un solo archivo. Lo que tengo es:
Application.ts
/// <reference path="../typings/angular2/angular2.d.ts" />
import {Component,View,bootstrap,NgFor} from "angular2/angular2";
import {NameService} from "./services/NameService";
@Component({
selector:'my-app',
injectables: [NameService]
})
@View({
template:'<h1>Hi {{name}}</h1>' +
'<p>Friends</p>' +
'<ul>' +
' <li *ng-for="#name of names">{{name}}</li>' +
'</ul>',
directives:[NgFor]
})
class MyAppComponent
{
name:string;
names:Array<string>;
constructor(nameService:NameService)
{
this.name = 'Michal';
this.names = nameService.getNames();
}
}
bootstrap(MyAppComponent);
servicios / NameService.ts
export class NameService {
names: Array<string>;
constructor() {
this.names = ["Alice", "Aarav", "Martín", "Shannon", "Ariana", "Kai"];
}
getNames()
{
return this.names;
}
}
Sigo recibiendo un mensaje de error que dice No provider for NameService
.
¿Alguien puede ayudarme a detectar el problema con mi código?
typescript
angular
systemjs
M.Svrcek
fuente
fuente
Respuestas:
Tienes que usar en
providers
lugar deinjectables
Ejemplo de código completo aquí .
fuente
providers
trabajos en la última versión beta (beta 0).bindings
En Angular 2 hay tres lugares donde puede "proporcionar" servicios:
"La opción del proveedor de bootstrap está diseñada para configurar y anular los servicios prerregistrados de Angular, como su soporte de enrutamiento". - referencia
Si solo desea una instancia de NameService en toda su aplicación (es decir, Singleton), inclúyala en la
providers
matriz de su componente raíz:Plunker
Si prefiere tener una instancia por componente, use la
providers
matriz en el objeto de configuración del componente:Consulte el documento de Inyectores jerárquicos para obtener más información.
fuente
A partir de Angular 2 Beta:
Agregar
@Injectable
a su servicio como:y a la configuración de su componente agregue el
providers
como:fuente
Usted debe a inyectar
NameService
dentro deproviders
gama de suAppModule
'sNgModule
metadatos.Si desea crear una dependencia para un nivel de componente particular sin preocuparse por el estado de su aplicación, puede inyectar esa dependencia en la
providers
opción de metadatos del componente como se muestra en la respuesta @Klass aceptada .fuente
DataManagerService
tiene@Injectable
decorador encima?Sorprendentemente, la sintaxis ha cambiado una vez más en la última versión de Angular :-) De los documentos de Angular 6 :
src / app / user.service.0.ts
fuente
Debería inyectar NameService dentro de la matriz de proveedores de los metadatos NgModule de su AppModule.
y asegúrese de importar en su componente por el mismo nombre (distingue entre mayúsculas y minúsculas), porque SystemJs distingue entre mayúsculas y minúsculas (por diseño). Si usa un nombre de ruta diferente en sus archivos de proyecto de esta manera:
main.module.ts
your-component.ts
entonces el sistema js hará importaciones dobles
fuente
En Angular v2 y hasta ahora es:
@Component({ selector:'my-app', providers: [NameService], template: ... })
fuente
Angular 2 ha cambiado, así es como debería verse la parte superior de su código:
Además, es posible que desee utilizar getters y setters en su servicio:
Luego, en su aplicación, simplemente puede hacer:
Le sugiero que vaya a plnkr.co y cree un nuevo plunk Angular 2 (ES6) y que primero funcione allí. Configurará todo para ti. Una vez que esté funcionando allí, cópielo en su otro entorno y clasifique cualquier problema con ese entorno.
fuente
El error
No provider for NameService
es un problema común que enfrentan muchos principiantes de Angular2.Motivo : antes de utilizar cualquier servicio personalizado, primero debe registrarlo en NgModule agregándolo a la lista de proveedores:
Solución:
fuente
También podría tener las dependencias declaradas en el comando bootstrap como:
Al menos eso es lo que funcionó para mí en alpha40.
este es el enlace: http://www.syntaxsuccess.com/viewarticle/dependency-injection-in-angular-2.0
fuente
Hola, puedes usar esto en tu archivo .ts:
Primero importe su servicio en este archivo .ts:
Luego, en el mismo archivo, puede agregar
providers: [Your_Service_Name]
:fuente
Agréguelo a proveedores no inyectables
fuente
En Angular puede registrar un servicio de dos maneras:
1. Registre un servicio en el módulo o componente raíz
Efectos:
Debe tener cuidado si registra un servicio en un módulo con carga lenta:
El servicio solo está disponible en componentes declarados en ese módulo
El servicio estará disponible en la aplicación de por vida solo cuando se cargue el módulo
2. Registre un servicio en cualquier otro componente de la aplicación.
Efectos:
Debe tener cuidado si registra un servicio en cualquier otro componente de la aplicación
La instancia del servicio inyectado estará disponible solo en el componente y todos sus elementos secundarios.
La instancia estará disponible en la vida útil del componente.
fuente
Debe agregarlo a la matriz de proveedores, que incluye toda la dependencia de su componente.
Mire esta sección en la documentación angular:
Entonces, en su caso, simplemente cambie los inyectables a proveedores como a continuación:
También en las nuevas versiones de Angular, @View y algunas otras cosas desaparecidas.
Para más información, visite aquí .
fuente
agregue su servicio a la matriz de proveedores [] en el archivo app.module.ts. Como abajo
// aquí mi servicio es CarService
app.module.ts
fuente
Angular2 requiere que declare todos los inyectables en la llamada de función bootstrap. Sin esto, su servicio no es un objeto inyectable.
fuente
providers
matriz en el objeto de configuración del componente. Si se incluye en laproviders
matriz, obtenemos una instancia por componente enlazado. Consulte el documento de Inyectores jerárquicos para obtener más información.Agregue @Injectable a su servicio como:
y en su componente agregue los proveedores como:
o si desea acceder a su servicio en toda la aplicación, puede pasar al proveedor
fuente
Registrar proveedores en un componente
Aquí hay un HeroesComponent revisado que registra HeroService en su matriz de proveedores.
fuente