2017-10-09 56 views
0

我正嘗試在我的應用程序中使用nativestorage(https://github.com/TheCocoaProject/cordova-plugin-nativestorage)。Ionic NativeStorage錯誤

一切都很好,我可以構建應用程序。

在我app.components.ts我有這個

this.setRootPage(); 

在的this.platform.ready().then(()

其中依次調用該函數

setRootPage() { 

//intro skip if value is set 

    this.nativeStorage.getItem("intro").then((intro) => { 
    if (intro) { 
    this.rootPage = Category1Page; 
    } else { 
    this.rootPage = IntroPage; 
    } 
}); 

    } 

我運行的應用程序Error: Uncaught (in promise): [object Object]當結束了一個錯誤結束在IOS模擬器以及瀏覽器上都使用ionic cordova run browser

你的幫助是極大的讚賞

離子信息

cli packages: (/usr/local/lib/node_modules) 

    @ionic/cli-utils : 1.12.0 
    ionic (Ionic CLI) : 3.12.0 

global packages: 

    cordova (Cordova CLI) : 7.0.1 

local packages: 

    @ionic/app-scripts : 1.3.7 
    Cordova Platforms : android 6.2.3 browser 4.1.0 ios 4.4.0 
    Ionic Framework : ionic-angular 3.3.0 

System: 

    ios-deploy : 1.9.2 
    Node  : v6.11.2 
    npm  : 3.10.10 
    OS   : macOS High Sierra 
    Xcode  : Xcode 9.0 Build version 9A235 

Misc: 

    backend : pro 

回答

2

我想你不能動態地改變0​​變量設置NavController的根源。首先確保rootPage有一個初始值(可能是一個空的頁面)。然後使用在NavControllerapp.component你有一個模板變量添加到ion-nav模板:

<ion-nav #Nav [root]="rootPage"></ion-nav> 

而且添加使用ViewChild參考:

@ViewChild('Nav') nav: NavController; 

然後你就可以修改你的setRootPage功能如下:

this.nativeStorage.getItem("intro").then((intro) => { 
    if (intro) { 
    this.nav.setRoot(Category1Page); 
    } else { 
    this.nav.setRoot(IntroPage); 
    } 
}, (error) => { 
    this.nav.setRoot(IntroPage); 
}); 
+0

像你說的難道。現在,錯誤「錯誤:未捕獲(承諾):[對象對象]」不顯示。然而,只是一個空白的頁面,並沒有在控制檯或例外錯誤... – RSK

+0

我忘了添加錯誤回調,看我更新的答案:-)如果沒有找到關鍵'intro'錯誤回調被調用。 – David

+0

感謝大衛的幫助。我將添加一些額外的修補程序,以便讓它工作並避免死亡白屏。感謝磨坊! – RSK

0

非常感謝David爲我指出了正確的方向。與往常一樣,我喜歡在我的問題的最後解決問題,以幫助其他可能面臨類似問題的人:)

問題是設置/檢索介紹頁面(滑塊)的值並動態發送該用戶基於來自nativestorage的值。

在app.html

<ion-nav #Nav [root]="rootPage"></ion-nav> 

在app.module.ts

import { Category1Page } from '../pages/layout/app1/category1/category1'; 
import { IntroPage } from '../pages/layout/intro/intro'; 

@NgModule({ 
    declarations: [ 
    ... 
    Category1Page, 
    IntroPage, 
    ... 

    ], 
.... 
entryComponents: [ 
    ... 
    Category1Page, 
    IntroPage, 
    ... 
    ], 

在app.components.ts

import { Category1Page } from '../pages/layout/app1/category1/category1'; 
import { IntroPage } from '../pages/layout/intro/intro'; 

@Component({ 
    templateUrl: 'app.html' 
}) 

export class MyApp { 

    public rootPage: any; 

... 
constructor(... private nativeStorage: NativeStorage ...) 
... 

initializeApp() { 
    this.platform.ready().then(() => { 
     ... 

     this.splashScreen.hide(); 

     this.setRootPage(); 
    }); 
    } 

    setRootPage() { 

    this.nativeStorage.getItem("intro").then((intro) => { 
    if (intro) { 
    this.rootPage = Category1Page; 
    } else { 
    this.rootPage = IntroPage; 
    } 
}, (error) => { 
    this.rootPage = IntroPage; 
}); 

    }