Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 离子2:无法解析的所有参数_Angular_Ionic Framework_Ionic2_Hybrid Mobile App - Fatal编程技术网

Angular 离子2:无法解析的所有参数

Angular 离子2:无法解析的所有参数,angular,ionic-framework,ionic2,hybrid-mobile-app,Angular,Ionic Framework,Ionic2,Hybrid Mobile App,我一直在尝试在多个页面上使用一个服务,但它可以在2个页面中的1个页面上工作。 这是我的服务: import {Component} from '@angular/core' import { DataService } from '../../db/db' @Injectable() export class DataService { constructor(@Inject(SQLite) public db = new SQLite(), public nav: NavControlle

我一直在尝试在多个页面上使用一个服务,但它可以在2个页面中的1个页面上工作。 这是我的服务:

import {Component} from '@angular/core'
import { DataService } from '../../db/db'

@Injectable()
export class DataService {

constructor(@Inject(SQLite) public db = new SQLite(), public nav: NavController) {
}
以下是我使用它的尝试: 它在这里工作:

@Component({
    templateUrl: 'home.html',
    providers: [DataService]
})

export class HomePage {
    constructor(public data: DataService){
        this.data = data;
        this.data.results;
    }
}
但事实并非如此:

import { Component, Inject } from '@angular/core'
import { DataService } from '../../../db/db'

@Component({
    templateUrl: 'infos.html',
    providers: [DataService]
})

export class NewEnigme {
    constructor(@Inject(DataService) public data: DataService){
        this.data = data;
    }
}
告诉我

'无法解析NewEnigme:(?)的所有参数。'

这是我的app.module.ts:

@NgModule({
  declarations: [
    MyApp,
    CameraPage,
    DocPage,
    MapPage,
    TabsPage,
    ScannerPage,
    HomePage,
    NewEnigme,
    TabsNewEnigme,
    detailPic
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    CameraPage,
    DocPage,
    MapPage,
    TabsPage,
    ScannerPage,
    TabsNewEnigme,
    detailPic,
    HomePage,
    NewEnigme
  ],
  providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}, ConnectivityService, DataService, SQLite]
})
export class AppModule {}
我已经尝试了在互联网上能找到的一切,我在这里迷路了。 我是新来的,我希望能得到一些帮助:)

编辑更多细节(摘自答案) 如果我在数据服务中添加以下函数之一:

launchEnigme(par){

    this.nav.push(TabsPage,{
        firstPassed: par.nom,
    });
}

newEnigme(){
    this.nav.setRoot(TabsNewEnigme, {});
}
错误发生了

无法解析InfoEnigme:(?)的所有参数

完整文件:

import {NavController} from 'ionic-angular'
import {Inject, Injectable} from '@angular/core'
import {SQLite} from 'ionic-native';
import { TabsPage } from '../pages/tabs/tabs'
import { TabsNewEnigme } from '../new/tabs/newTabs'

@Injectable()
export class DataService {
public results: Array<Object>;

constructor(@Inject(SQLite) public db = new SQLite(), public nav: NavController) {

    console.log("leqdl501");
    db.openDatabase({
        name: 'database.db',
        location: 'default',
        androidDatabaseImplementation: 2// the location field is required
    }).then(() => {
        db.executeSql("drop table if exists Enigmes", {});
        db.executeSql("create table Enigmes(nom VARCHAR(32), description VARCHAR(128))", {});
        db.executeSql("INSERT INTO Enigmes (nom, description) VALUES ('Enquete dans Rouen', 'enquete dans Rouen')", {});
        db.executeSql("INSERT INTO Enigmes (nom, description) VALUES ('Enquete dans Nantes', 'enquete dans Nantes')", {});
        db.executeSql("INSERT INTO Enigmes (nom, description) VALUES ('Enquete dans Paris', 'enquete Parisienne')"
            , {}).then(() => {
            console.log('CREATED');
            this.refresh();
        }, (err) => {
            console.error('Unable to execute sql: ', err);
        });
    }, (err) => {
        console.error('Unable to open database: ', err);
    });
}

refresh() {
    this.db.executeSql("SELECT * FROM Enigmes", {}).then((data) => {
        this.results = [];
        if (data.rows.length > 0) {
            for (var i = 0; i < data.rows.length; i++) {
                this.results.push({
                    nom: data.rows.item(i).nom,
                    description: data.rows.item(i).description
                });

            }
        }
    }, (error) => {
        console.log("ERROR: " + JSON.stringify(error));
    });

}

launchEnigme(par){

    this.nav.push(TabsPage,{
        firstPassed: par.nom,
    });
}

newEnigme(){
    this.nav.setRoot(TabsNewEnigme, {});
}



}
import{NavController}来自“离子角度”
从“@angular/core”导入{Inject,Injectable}
从“ionic native”导入{SQLite};
从“../pages/tabs/tabs”导入{TabsPage}
从“../new/tabs/newTabs”导入{tabsnewinigme}
@可注射()
导出类数据服务{
公开结果:数组;
构造函数(@Inject(SQLite)public db=new SQLite(),public nav:NavController){
控制台日志(“leqdl501”);
db.openDatabase({
名称:“database.db”,
位置:'默认',
androidDatabaseImplementation:2//位置字段是必需的
}).然后(()=>{
executeSql(“如果存在谜,则删除表”,{});
executeSql(“创建表Enigmes(nom VARCHAR(32),description VARCHAR(128)),{});
db.executeSql(“插入谜(名称、描述)值('Enquete dans Rouen','Enquete dans Rouen')”,{});
db.executeSql(“插入谜(名称、描述)值('Enquete dans Nantes','Enquete dans Nantes')”,{});
db.executeSql(“插入谜语(名称、描述)值('Enquete dans Paris'、'Enquete Parisienne')”
,然后(()=>{
console.log('CREATED');
这个。刷新();
},(错误)=>{
console.error('无法执行sql:',err);
});
},(错误)=>{
console.error('无法打开数据库:',err);
});
}
刷新(){
this.db.executeSql(“从Enigmes中选择*,{})。然后((数据)=>{
这个结果=[];
如果(data.rows.length>0){
对于(var i=0;i{
log(“错误:+JSON.stringify(错误));
});
}
launchEnigme(标准杆){
这个导航按钮(TabsPage{
首次通过:
});
}
纽尼格姆(){
this.nav.setRoot(TabsNewEnigme,{});
}
}

您的数据服务和页面之间似乎有一个循环引用,阻止它们正确实例化

此示例具有循环引用,不起作用

如果没有循环引用,您的代码应该可以工作-尝试为您的逻辑找到替代解决方案


谢谢你的关心。已经尝试过了,它在这个问题上没有任何改变。我认为下面的plunkr实现了您试图实现的目标,它在数据服务中没有导航控制器,在组件中没有提供者。检查导入的文件路径是否也正确。谢谢你花时间@0mpurdy,但这正是我得到的。我想问题可能是我在我的应用程序中处理了2个tabsViews,这似乎会把所有我发现的问题都搞糟。在我的服务(或服务的一个方法)中调用nav.push()时,似乎发生了错误。你知道为什么吗?@N.R抱歉,我还没有足够的声誉来评论你的回答。我能够复制这个plunk中的错误:我认为这是因为您对服务中的页面和页面中的服务有一个循环引用。我已相应地更新了我的答案
import {Component, Injectable} from '@angular/core';
import {NavController} from 'ionic-angular';

import {AlternativePage} from '../../alternative.page';

@Injectable()
export class DataService {

    public data = 'Data from service';

    constructor(private nav: NavController) { }

    public serviceNavigate() {
      this.nav.push(AlternativePage);
    }

}