Ionic2:不能在服务中使用NavController。

时间:2017-10-04 09:43:37

标签: angular service ionic2 undefined

我还是学习者。不仅在Ionic中,在Angular中也是如此。

我已经编写了一些页面,并希望在用户可以切换所有主页的每个页面上添加页脚。写完第二页后,我看到为此提供服务会很好,因为我再次使用相同的方法。

以下是我的服务现在的样子:

export class Navigation {
  public navCtrl: NavController;

  onLoadHome(){
    this.navCtrl.push(HomePage);
  }   
}

当我现在在HTML模板中调用Navigator.onLoadHome()时,我收到以下错误: 无法读取属性'推送'未定义的。

所以我知道我的应用找到了服务并找到了方法。但我的navCtrl未定义。我通过以下方式尝试了另一种方式:

export class Navigation {
  constructor(private navCtrl: NavController){}

  onLoadHome(){
    this.navCtrl.push(HomePage);
  }
}

现在我收到另一条错误消息:无法解析导航的所有参数。

我真的不知道如何做到这一点。我希望你能帮助我。

(顺便说一下。我已经缩短了课程。但是其他方法也像onLoadHome一样,只针对其他页面。)

1 个答案:

答案 0 :(得分:3)

这不是在页面之间导航的好方法,但我希望这可以帮助你

在您要使用服务的页面中,您必须导入服务,然后将其设置为

public mNavigation: Navigation;

constructor(public navCtrl: NavController, public navParams: NavParams) {
   this.mNavigation = new Navigation(navCtrl)
}

如果您想浏览,只需致电this.mNavigation.onLoadHome();

更好的方法是,您应该在服务中使用Nav App代替NavCtrl。看起来像这样

import { App } from 'ionic-angular';

@Injectable()
export class NavigationProvider {

  constructor(public app: App) {
  }

  onLoadHome(){
    this.app.getActiveNav().push(HomePage);
  }
}

然后你的页面会像这样

constructor(public navCtrl: NavController, 
    public mNavigationProvider: NavigationProvider,
    public navParams: NavParams) {
  }

  onNavigate() {    
    this.mNavigationProvider.onLoadHome();
  }