2017-04-17 12 views
10

"संग्रहण के लिए कोई प्रदाता" सब कुछ मैं मिल सकता है पढ़ने, और असफल होने के बाद, मैं यहाँ पूछना चाहिए:Ionic2 त्रुटि:

मैं बस की तरह डॉक मेरे लिए कहता है, ionic2 के भंडारण का उपयोग करने की कोशिश कर रहा हूँ,

डॉक: https://ionicframework.com/docs/storage/

यहाँ

मेरी कोड है:

एप्लिकेशन-module.ts

import { BrowserModule } from '@angular/platform-browser'; 
    import { ErrorHandler, NgModule } from '@angular/core'; 
    import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular'; 
    import { SplashScreen } from '@ionic-native/splash-screen'; 
    import { StatusBar } from '@ionic-native/status-bar'; 

    import { MyApp } from './app.component'; 
    import { HomePage } from '../pages/home/home'; 
    import { Intro } from '../pages/intro/intro'; 
    import { Checklist } from '../pages/checklist/checklist'; 
    // import { Http } from '@angular/http'; 
    import {IonicStorageModule} from '@ionic/Storage'; 
    import { Data } from '../providers/data'; 
    import {HttpModule} from '@angular/http'; 
    // import {Storage} from '@ionic/storage'; 


    @NgModule({ 
     declarations: [ 
     MyApp, 
     HomePage, 
     Intro, 
     Checklist 
     ], 
     imports: [ 
     HttpModule, 
     BrowserModule, 
     IonicModule.forRoot(MyApp), 
     IonicStorageModule.forRoot() 
     ], 
     bootstrap: [IonicApp], 
     entryComponents: [ 
     MyApp, 
     HomePage, 
     Intro, 
     Checklist 
     ], 
     providers: [ 
     StatusBar, 
     SplashScreen, 
     {provide: ErrorHandler, useClass: IonicErrorHandler}, 
     // Storage, 
     //Http, 
     Data 
     ], 
    }) 
    export class AppModule {} 


data.ts 

import { Injectable } from '@angular/core'; 
// import { Http } from '@angular/http'; 
import 'rxjs/add/operator/map'; 
// import { HttpModule } from '@angular/http'; 

import { Storage } from '@ionic/storage'; 


@Injectable() 
export class Data { 
    constructor(public storage: Storage) { 
    } 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    getData(): Promise<any> { 
    return this.storage.get('checklists'); 
    } 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    save(data): void { 
    let saveData = []; 
    //Remove observables 
    data.forEach((checklist) => { 
     saveData.push({ 
     title: checklist.title, 
     items: checklist.items 
     }); 
    }); 
    let newData = JSON.stringify(saveData); 
    this.storage.set('checklists', newData); 
    } 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
} 
,210

home.ts

// import { Component } from '@angular/core'; 
// import { NavController } from 'ionic-angular'; 

// @Component({ 
// selector: 'page-home', 
// templateUrl: 'home.html' 
// }) 
// export class HomePage { 

// constructor(public navCtrl: NavController) { 

// } 

// } 


import { Component } from '@angular/core'; 
import { NavController, AlertController, Platform } from 'ionic-angular'; 
import { Checklist } from '../checklist/checklist'; 
import { ChecklistModel } from '../../models/checklist-model'; 
import { Data } from '../../providers/data'; 
import { Keyboard } from 'ionic-native'; 
@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html', 
}) 
export class HomePage { 
    checklists: ChecklistModel[] = []; 

    constructor(public navCtrl: NavController, public dataService: Data, 
    public alertCtrl: AlertController, public platform: Platform) { 
    } 

    // constructor(public navCtrl: NavController, public alertCtrl: AlertController, public platform: Platform) { 
    // // this.checklists.push(new ChecklistModel("Noam", [1,2,3])); 
    // } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    ionViewDidLoad() { 
    } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    addChecklist(): void { 
    let prompt = this.alertCtrl.create({ 
     title: 'New Checklist', 
     message: 'Enter the name of your new checklist below:', 
     inputs: [ 
     { 
      name: 'name' 
     } 
     ], 
     buttons: [ 
     { 
      text: 'Cancel' 
     }, 
     { 
      text: 'Save', 
      handler: data => { 
      let newChecklist = new ChecklistModel(data.name, []); 
      this.checklists.push(newChecklist); 
      newChecklist.checklistUpdates().subscribe(update => { 
       this.save(); 
      }); 
      this.save(); 
      } 
     } 
     ] 
    }); 
    prompt.present(); 
    } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    renameChecklist(checklist): void { 
    let prompt = this.alertCtrl.create({ 
     title: 'Rename Checklist', 

     message: 'Enter the new name of this checklist below:', 
     inputs: [ 
     { 
      name: 'name' 
     } 
     ], 
     buttons: [ 
     { 
      text: 'Cancel' 
     }, 
     { 
      text: 'Save', 
      handler: data => { 
      let index = this.checklists.indexOf(checklist); 
      if (index > -1) { 
       this.checklists[index].setTitle(data.name); 
       this.save(); 
      } 
      } 
     } 
     ] 
    }); 
    prompt.present(); 
    } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    viewChecklist(checklist): void { 
    this.navCtrl.push(Checklist, { 
     checklist: checklist 
    }); 
    } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    removeChecklist(checklist): void { 
    let index = this.checklists.indexOf(checklist); 
    if (index > -1) { 
     this.checklists.splice(index, 1); 
     this.save(); 
    } 
    } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    save(): void { 
    Keyboard.close(); 
    this.dataService.save(this.checklists); 
    } 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
} 

विधि है कि कहा जाता है और भंडारण का उपयोग करने के लिए माना जाता है मुखपृष्ठ के save() है।

मैं नहीं मिल है कि अब तक, तथापि, क्योंकि पेज भी लोड होने से पहले, मैं प्राप्त कर सकते हैं

Runtime Error Uncaught (in promise): Error: No provider for Storage! Error at g (http://localhost:8100/build/polyfills.js:3:7133) at injectionError (http://localhost:8100/build/main.js:1585:86) at noProviderError (http://localhost:8100/build/main.js:1623:12) at ReflectiveInjector_.throwOrNull (http://localhost:8100/build/main.js:3125:19) at ReflectiveInjector.getByKeyDefault (http://localhost:8100/build/main.js:3164:25) at ReflectiveInjector.getByKey (http://localhost:8100/build/main.js:3096:25) at ReflectiveInjector.get (http://localhost:8100/build/main.js:2965:21) at AppModuleInjector.get (ng:///AppModule/module.ngfactory.js:254:82) at AppModuleInjector.getInternal (ng:///AppModule/module.ngfactory.js:481:44) at AppModuleInjector.NgModuleInjector.get (http://localhost:8100/build/main.js:3929:44) at resolveDep (http://localhost:8100/build/main.js:11334:45) at createClass (http://localhost:8100/build/main.js:11202:32) at createDirectiveInstance (http://localhost:8100/build/main.js:11028:37) at createViewNodes (http://localhost:8100/build/main.js:12377:49) at createRootView (http://localhost:8100/build/main.js:12282:5)

Package.json:

{ 
    "name": "ionic-hello-world", 
    "author": "Ionic Framework", 
    "homepage": "http://ionicframework.com/", 
    "private": true, 
    "config": { 
    "ionic_source_map": "source-map" 
    }, 
    "scripts": { 
    "clean": "ionic-app-scripts clean", 
    "build": "ionic-app-scripts build", 
    "ionic:build": "ionic-app-scripts build", 
    "ionic:serve": "ionic-app-scripts serve" 
    }, 
    "dependencies": { 
    "@angular/common": "4.0.0", 
    "@angular/compiler": "4.0.0", 
    "@angular/compiler-cli": "4.0.0", 
    "@angular/core": "4.0.0", 
    "@angular/forms": "4.0.0", 
    "@angular/http": "4.0.0", 
    "@angular/platform-browser": "4.0.0", 
    "@angular/platform-browser-dynamic": "4.0.0", 
    "@ionic-native/core": "3.4.2", 
    "@ionic-native/splash-screen": "3.4.2", 
    "@ionic-native/status-bar": "3.4.2", 
    "@ionic/storage": "^2.0.1", 
    "ionic-angular": "3.0.1", 
    "ionic-native": "^2.9.0", 
    "ionicons": "3.0.0", 
    "rxjs": "5.1.1", 
    "sw-toolbox": "3.4.0", 
    "zone.js": "^0.8.4" 
    }, 
    "devDependencies": { 
    "@ionic/app-scripts": "1.3.0", 
    "typescript": "~2.2.1", 
    "webpack": "^2.4.1" 
    }, 
    "cordovaPlugins": [ 
    "cordova-plugin-whitelist", 
    "cordova-plugin-console", 
    "cordova-plugin-statusbar", 
    "cordova-plugin-device", 
    "cordova-plugin-splashscreen", 
    "ionic-plugin-keyboard" 
    ], 
    "cordovaPlatforms": [], 
    "description": "quicklists: An Ionic project" 
} 

जब से मैं सब कुछ किया था डॉक ने कहा, कृपया मुझे प्रबुद्ध - क्या अभी भी याद आ रही है कि भंडारण का कारण होगा ढूंढा जाना नहीं चाहते

धन्यवाद

+0

आपके ऐप मॉड्यूल में, क्या आपने IonicStorageModule (forRoot) को स्थानांतरित करने का प्रयास किया है जो प्रदाता सरणी में आपके आयात विवरण में है? ऐसा लगता है कि त्रुटि उस दिशा में बहुत मुश्किल है। सुनिश्चित नहीं है कि आपको रूट भाग की आवश्यकता है, लेकिन मैं इसे आयात सरणी और प्रदाता सरणी से बाहर ले जाने की कोशिश करता हूं। बहुत यकीन है कि जहां इंजेक्शन योग्य चीजें जाने की जरूरत है। – chairmanmow

+0

@chchanmow http://stackoverflow.com/questions/42788623/local-storage-in-ionic-2- यहां आतंक यह मुझे ऐसा करने के लिए कहता है जो मैंने किया था, साथ ही दस्तावेज़ https://ionicframework.com/docs/storage/राज्यों में यह आयात में है – Gulzar

+1

हम्म, हाँ, मुझे लगता है कि आपने निर्देशों का पालन किया है। मैंने एक चीज देखी जो शायद शामिल हो, मैंने देखा कि आप '@ ionic/storage' से 'आयात {संग्रहण} आयात कर रहे हैं;' एक स्थान, और आपका आयात आयात {संग्रहण} '@ आयनिक/संग्रहण' से; ... ध्यान दें कि एस उनमें से एक में पूंजीकृत है। वैसे भी, सुनिश्चित नहीं है कि मैं कितनी मदद कर सकता हूं, लेकिन शायद यह एक टाइपो है। – chairmanmow

उत्तर

12

पहले आप स्थापित करने की आवश्यकता: npm install --save @ionic/storage

समस्या

था ऐप में

।ts

import {IonicStorageModule} from '@ionic/Storage'; 

कैपिटल 'एस' गैर राजधानी 'एस'

from '@ionic/storage' 

कोई विचार के

from '@ionic/Storage' 

istead के बजाय क्यों नहीं होगा संकलक पकड़ कि अगर यह एक समस्या है, लेकिन ऐसा नहीं हुआ।

धन्यवाद

+0

https://github.com/ionic-team/ionic-storage/releases/tag/v2.0.0 रन एनपीएम इंस्टॉल @ आयनिक/स्टोरेज @ 2.0.0 - सेव - सेव-सटीक अपने संग्रहण से निकालें app.module.ts में प्रदाताओं को app.module.ts में आयात {IonicStorage} से आयात करने के बजाय '@ आयनिक/स्टोरेज' से आयात {IonicStorageModule} आयात करें IonicStorageModule.forRoot() को आयात सरणी में जोड़ें app.module.ts – JGFMK

5

इस NPM --save स्थापित @ आयनिक/भंडारण

मैं इस इस का उपयोग कर काम कर पाने में कामयाब रहे

अंदर app.module.ts

import { Storage } from '@ionic/storage'; 

और फिर कर .. ...

providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}, Storage] 

और फिर मेरे page.ts

import { Storage } from '@ionic/storage'; 

निर्माता में ...

public storage: Storage 

और फिर मेरी कोड की हिम्मत भीतर ..

this.storage.get('date').then((value) => { 
    // blah 
}); 
2
Please use this plugin for native storage   

ionic cordova plugin add cordova-plugin-nativestorage 
npm install --save @ionic-native/native-storage 

@chairmanmow करने और आयात app.module.ts

import { NativeStorage } from '@ionic-native/native-storage'; 

    providers: [ 
    StatusBar, 
    SplashScreen, 
    NativeStorage, 
     LocalStorageProvider, 
    {provide: ErrorHandler, useClass: IonicErrorHandler} 

    ] 

यहाँ

+0

यह मेरे लिए सही काम करता है –

4

कोड दर्ज मेरे मामले में, मैं app.module में निम्नलिखित जोड़ने के लिए भूल गया .ts

import { IonicStorageModule } from '@ionic/storage';
@NgModul({ ..., Imports: [ ... IonicStorageModule.forRoot() ],

संबंधित मुद्दे