Ich habe einen Dienst erstellt, der eine PouchDB-Datenbank initialisiert und versucht, den Dienst und seine Methode in einer anderen meiner Komponenten aufzurufen. Ich erhalte diese Fehlermeldung:Typisierung kann Provider in Ionic 2 App nicht finden
[23:43:34] Error: Error at /Users/Brad/IonicApps/CMTAv2/.tmp/pages/projects/projects.ts:24:27
[23:43:34] Cannot find name 'ProjectService'.
[23:43:34] ngc failed
[23:43:34] ionic-app-script task: "build"
[23:43:34] Error: Error
Hier ist mein Code für den Dienst ist:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
/*
Generated class for the ProjectService provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular 2 DI.
*/
let PouchDB = require('pouchdb');
@Injectable()
export class ProjectService {
private _db;
private _projects;
constructor(public http: Http) {
console.log('Hello ProjectService Provider');
}
initDB() {
this._db = new PouchDB('Projects', { adapter: 'websql' });
}
add(project) {
return this._db.post(project);
}
delete(project) {
return this._db.remove(project);
}
getAll() {
if (!this._projects) {
return this._db.allDocs({ include_docs: true})
.then(docs => {
// Each row has a .doc object and we just want to send an
// array of birthday objects back to the calling controller,
// so let's map the array to contain just the .doc objects.
this._projects = docs.rows.map(row => {
// Dates are not automatically converted from a string.
row.doc.Date = new Date(row.doc.Date);
return row.doc;
});
// Listen for changes on the database.
this._db.changes({ live: true, since: 'now', include_docs: true})
.on('change', this.onDatabaseChange);
return this._projects;
});
} else {
// Return cached data as a promise
return this._projects;
}
}
private onDatabaseChange = (change) => {
var index = this.findIndex(this._projects, change.id);
var project = this._projects[index];
if (change.deleted) {
if (project) {
this._projects.splice(index, 1); // delete
}
} else {
change.doc.Date = new Date(change.doc.Date);
if (project && project._id === change.id) {
this._projects[index] = change.doc; // update
} else {
this._projects.splice(index, 0, change.doc) // insert
}
}
}
// Binary search, the array is by default sorted by _id.
private findIndex(array, id) {
var low = 0, high = array.length, mid;
while (low < high) {
mid = (low + high) >>> 1;
array[mid]._id < id ? low = mid + 1 : high = mid
}
return low;
}
}
Hier ist mein Code für die andere Komponente ist:
import {Component, NgZone} from '@angular/core';
import {NavController, ModalController} from 'ionic-angular';
import { ReportsPage } from '../reports/reports';
import { ProjectDetailPage } from '../project-detail/project-detail';
import { ProjectService } from '../../providers/project-service.ts';
import { Platform } from 'ionic-angular';
/*
Generated class for the Projects page.
See http://ionicframework.com/docs/v2/components/#navigation for more info on
Ionic pages and navigation.
*/
@Component({
selector: 'page-projects',
templateUrl: 'projects.html',
providers: [ProjectService]
})
export class ProjectsPage {
public projects = [];
private projectService: ProjectService;
constructor(public navCtrl: NavController,
public modalCtrl: ModalController,
private platform: Platform,
private zone: NgZone) {
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
this.projectService.initDB();
this.projectService.getAll()
.then(data => {
this.zone.run(() => {
this.projects = data;
});
})
.catch(console.error.bind(console));
});
}
ionViewDidLoad() {
console.log('Hello Projects Page');
}
public addProject() {
let modal = this.modalCtrl.create(ProjectDetailPage);
modal.present();
}
public openProject(project) {
this.navCtrl.push(ReportsPage);
}
}
Gibt es Gründe, warum dies sein könnte Ereignis? Ich habe versucht, mit den Deklarationen in app.module.ts, aber das hat nichts getan. Meine IDE sagt mir, dass sie "ProjectService" finden kann, also gibt es dort kein Problem. Muss ich den Provider innerhalb einer Typings Config oder etwas deklarieren?
Vielen Dank für die Hilfe im Voraus!
Anbieter sind Modulebene, dann legen Sie ein privates Mitglied vom Typ ProjectService im Auftragnehmer. –
haben das gleiche Problem, aber ich lade nur den Anbieter in der app.module Datei! Der Import funktioniert auch, aber wenn ich den Dienst im Konstruktor aufrufen werde, bekomme ich den Fehler Service kann nicht gefunden werden. – KaFu