2017-02-18 45 views
-1

typescript、angular2、およびaspコアを使用して簡単なジョブを試しているので、約10時間かかりました。私がここに到達した経路と、あなたが私が感謝する考えがある場所について説明します。TypeScriptモジュールが見つかりません。

まず、あなたは、私がリンク怒鳴るからプロジェクトテンプレートを使用していますことを考慮する必要があります。

Template

その後、私はいくつかのlocalStorageでデータを格納するためのいくつかのコードを追加したいです。

リンクによっては、非常に単純なlocalStorageへのアクセスが必要であることが示唆されています。私はangular2のコンポーネント内からのlocalStorageにアクセスしたいときしかし、私はこのエラーを得た:

localStorage is not defined

その後、私は解決策のために多くのことをGoogleで検索し、以下のライブラリが見つかりました:

angular2-localstorage

angular-2-local-storage

angular2-local-storage

しかし、それらのすべては動作しません。

次に、私はサービスを書くことを試みましたが、簡単にlocalStorageにアクセスすることができます。それから私は、このファイルを作成しました:

/ClientApp/app/services/local-storage-service.tsを

export class LocalStorageService { 
    write(key: string, value: any) { 
     if (value) { 
      value = JSON.stringify(value); 
     } 
     localStorage.setItem(key, value); 
    } 

    read<T>(key: string): T { 
     let value: string = localStorage.getItem(key); 

     if (value && value != "undefined" && value != "null") { 
      return <T>JSON.parse(value); 
     } 

     return null; 
    } 
} 

が、私はこのようにそれをインポートしようとすると:私が得た

import { LocalStorageService } from 'services/local-storage-service'; 

をこのエラー:

cannot find module 'services/local-storage-service' 

私はあなたが推測できるすべてを試しました。奇妙な部分が輸入怒鳴るが正常に動作していることである:

import { AppComponent } from './components/app/app.component'; 

私は/services/app.component」にそのファイルをコピーするとき、ファイルが「/ClientApp/app/app.component.ts」であるが、こと。同じエラーが発生します。

私はこの問題について質問する方法については十分に考えていません。しかし、私はあなたのアイデアを試してみます。

****のUPDATE これは、ディレクトリツリーである:

Directory Tree

ファイルapp.modules.tsに私はこのようにアクセスすることができますが:エラーなし

import { LocalStorageService } from './services/local-storage.service'; 

。 settoken.component.tsファイルではエラーが発生します。

***私はサービスが注入されている正しいパスとREUPDATE今

。しかし、localStorageは定義されていません! サービスコードが提案されています。

import { Injectable } from '@angular/core'; 

@Injectable() 
export class LocalStorageService { 
    private storage: any; 

    constructor() { 
     this.storage = localStorage; 
    } 

    public retrieve(key: string): any { 
     var item = this.storage.getItem(key); 

     if (item !== null && item !== 'undefined') { 
      return JSON.parse(this.storage.getItem(key)); 
     } 

     return; 
    } 

    public store(key: string, value: any) { 
     this.storage.setItem(key, JSON.stringify(value)); 
    } 

} 

とエラー:

Exception: Call to Node module failed with error: Error: Uncaught (in promise): ReferenceError: localStorage is not defined 
ReferenceError: localStorage is not defined 

TG。

+0

インポートパスに '。/'や '../'がありませんか?一般的にノードモジュールは、あなたがバンドル業者(私が知っているか分からない)で魔法をやっている場合を除き、インポートのものがなければ起動することができます –

+0

"https://www.typescriptlang.org/docs/handbook /module-resolution.html#relative-vs-non-relative-module-imports "親ディレクトリ以外では相対パスは試されません。しかし、私はあなたが言及したものを試しました。何も変わっていません! – ConductedClever

+0

うーん、私はこれについて知らなかった、今日何か新しいことを学んだ!ありがとう!申し訳ありませんが、それはあなたにとって有用ではありませんでした。 –

答えて

2

モジュール以外のファイルの場合は、相対パスを使用する必要があります。例えば、./,../。あなたは、そのファイルがそのサービスに関連してそのサービスをインポートしようとしている場所がどこであるかは言いません。それが親ディレクトリにあると仮定すると、パスは./services/local-storage-serviceになります。

問題が解決しない場合は、このローカルストレージサービスをお試しください。

import { Injectable } from '@angular/core'; 

@Injectable() 
export class LocalStoragePersistence { 
    private storage:any; 

    constructor() { 
     this.storage = localStorage; 
    } 

    public retrieve(key:string):any { 
     var item = this.storage.getItem(key); 

     if (item !== null && item !== 'undefined') { 
      return JSON.parse(this.storage.getItem(key)); 
     } 

     return; 
    } 

    public store(key:string, value:any) { 
     this.storage.setItem(key, JSON.stringify(value)); 
    } 

} 

import { LocalStoragePersistence } from './services/local-storage.service'; 

であなたのコンポーネントにインポートし、それはあなたがあなたのプロバイダの配列にそれを宣言することを忘れないでくださいことを確認してください:providers: [ LocalStoragePersistence ]

注意をlocal-storage.service.tsにファイルの名前を変更するためにそこに提案。これは、ファイル(feature.type.ts)のAngular 2命名パターンです。お役に立てれば。

+0

あなたのコメントは良かったが、まだ答えはなかった。私が追加した更新を考慮してください。他のアイデア? – ConductedClever

+0

ああそれは解決される!このパスによって ".. {../../services/local-storage.service"からインポート{LocalStorageService}; "理由を見つけることができます。私は前にこれらの方法をすべて試したので。 – ConductedClever

+0

私は問題がツールの1つであると思います。正しい命名がなくてもInjectableがなくても今はうまくいく!しかし、私はこれまでにこれらすべてを試したと確信しています。私は実行モードでVSの機能について疑いがあります。 – ConductedClever

関連する問題