2017-10-04 14 views
0

私はまだ学習者です。イオニックだけでなく、角度でも。Ionic2:サービスでNavControllerを使用することはできません。

私はいくつかのページを書いており、ユーザーがすべてのメインページを切り替えることができるすべてのページにフッターを追加したいと考えました。第2ページを書いた後、同じ方法をもう一度使いましたので、これをサービスするのはいいと思っていました。ここで

は私のサービスが今のように見えるものです:

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のように同じことを行う。)

+0

ポスト 'NavController' –

+0

[' NavController'](https://ionicframework.com/docs/api/navigation/のようになりますNavController /)は、ページ/コンポーネントにのみ挿入されているはずです。 –

+0

この 'onLoadHome(navCtrl:NavController)'のように、 'NavController'オブジェクトを' onLoadHome() '関数に渡すことができます。 – hrdkisback

答えて

3

それは、ページ間を移動するための良い方法ではないのですが、私はこれかもしれないを願っていますあなたがサービスを使用するページでは、あなたに

を助け、あなたがナビゲートしたいときにだけ呼び出し、この

public mNavigation: Navigation; 

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

ようにそれを設定し、次にサービスをインポート奨めthis.mNavigation.onLoadHome();


あなたのサービスでNavCtrlの代わりにNavAppを使用することをお勧めします。それは、この

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(); 
    } 
+0

私はこれを試しましたが、私はまだランタイムエラーが発生します: 'ナビゲーションのすべてのパラメータを解決できません'。ところで、なぜページ間を移動するのが良い方法ではないのですか? –

+0

"サービスからのビュー(MVCの壊れたビュー)を変更するのは悪い習慣ですが、サービスからメインコントローラにイベントを送信し、コントローラがNavController(最良の方法)を使用できるか、NavControllerを属性(悪い方法ではない...)。サービスを使用する代わりに、コンポーネントを作成する必要があるかもしれません。 もう1つの方法を追加しました。試してみてください –

+0

まず第2の例は完全に機能しました。ありがとう。 :) あなたの助言に。つまり、ナビゲーションコンポーネントを作成する必要があります。この方法では、すべてのメソッドを書き留めてから、このコンポーネントをすべてのページの新しいフッターとして使用できます。私はあなたを正しく理解しましたか? –

関連する問題