Angular2 本地存儲LocalStorage的使用

在網(wǎng)站開發(fā)過程中,總有一些類似記錄用戶喜好的數(shù)據(jù)需要保存在客戶端,比如記住用戶名密碼等。常規(guī)第一反應(yīng)是使用cookie,但是cookie的使用有諸多的限制。于是HTML5規(guī)范中出來了LocalStorage,大小為5M。
Angular2 關(guān)于LocalStorage的使用在github上有些例子,但大多都是基于2.0.* 或是beta版本的。我用的是最新版本Angular 2.1用不了,于是手動改了下。

一、參考github項目:

https://github.com/NilsHolger/angular2todoes
https://github.com/rrgarciach/angular2-local-storage

二、環(huán)境:

Angular 2.1

三、實現(xiàn):

添加文件app/core/common/local.storage.ts(文件位置根據(jù)自己喜好)
 import {Provider} from '@angular/core'; 
export class LocalStorage {

    public localStorage:any;

    constructor() {
        if (!localStorage) {
            throw new Error('Current browser does not support Local Storage');
        }
        this.localStorage = localStorage;
    }

    public set(key:string, value:string):void {
        this.localStorage[key] = value;
    }

    public get(key:string):string {
        return this.localStorage[key] || false;
    }

    public setObject(key:string, value:any):void {
        this.localStorage[key] = JSON.stringify(value);
    }

    public getObject(key:string):any {
        return JSON.parse(this.localStorage[key] || '{}');
    }

    public remove(key:string):any {
        this.localStorage.removeItem(key);
    }
}
// export const LOCAL_STORAGE_PROVIDERS:any[] = [
//         Provider(LocalStorage, {useClass: LocalStorage})
// ];

四、使用:

1、在文件app.module.ts 中引用
 
import { LocalStorage } from './core/common/local.storage';
...
@NgModule({
   ...
   providers: [LocalStorage,...],
...
}) 
2、在你的Component 中使用
 ...
// 引用
import { LocalStorage } from '../core/common/local.storage'
     // 注入
     constructor(
        private ls: LocalStorage,
     ...   
     ) 
 
    get(): void {
        // 讀取LocalStorage
        this.cache = this.ls.getObject("logincache") ; 
    }
    set(): void { 
        // 寫入LocalStorage
        this.ls.setObject("logincache",this.cache) ;
    }

五、總結(jié):

才接觸不太久,又沒有Angular1的基礎(chǔ),使用Angular2比較吃力。網(wǎng)上資源太少,走的很艱難,只有多次修改、報錯、再修改。
以下是相關(guān)文件的全部代碼,由于不是單獨(dú)例子,多余其它功能代碼請忽略,如你有更好的方法,歡迎指正!

1、文件app/core/common/local.storage.ts
import {Provider} from '@angular/core'; 
export class LocalStorage {

    public localStorage:any;

    constructor() {
        if (!localStorage) {
            throw new Error('Current browser does not support Local Storage');
        }
        this.localStorage = localStorage;
    }

    public set(key:string, value:string):void {
        this.localStorage[key] = value;
    }

    public get(key:string):string {
        return this.localStorage[key] || false;
    }

    public setObject(key:string, value:any):void {
        this.localStorage[key] = JSON.stringify(value);
    }

    public getObject(key:string):any {
        return JSON.parse(this.localStorage[key] || '{}');
    }

    public remove(key:string):any {
        this.localStorage.removeItem(key);
    }
}
// export const LOCAL_STORAGE_PROVIDERS:any[] = [
//         Provider(LocalStorage, {useClass: LocalStorage})
// ];

2、文件app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';

import './rxjs-extensions';

import { LocalStorage } from './core/common/local.storage';

import { AppComponent } from './app.component';
import { IndexComponent } from './index/index.component';
import { MainComponent } from './main/main.component';
import { HelpComponent } from './help/help.component';

import { Session } from './core/auth/session';

import { AuthService } from './core/auth/auth.service';
import { UserService } from './core/user/user.service';

import { AppRoutingModule }     from './app-routing.module';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AppRoutingModule, 
  ],
  declarations: [
    AppComponent,IndexComponent,MainComponent,HelpComponent
  ],
  providers: [LocalStorage,AuthService,UserService],
  bootstrap: [AppComponent]
})
export class AppModule { }


3、文件app/index/index.component.ts

import { Component,OnInit,Input   } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';
import { Location }               from '@angular/common';

import { LocalStorage } from '../core/common/local.storage';

import { AuthService } from '../core/auth/auth.service';
import { Session }     from '../core/auth/session'; 
import { User }        from '../core/user/user'; 


import { LoginCache }        from './logincache'; 

@Component({
//  moduleId:module.id,
  selector: 'app-index',
  templateUrl: './index.component.html',
  styleUrls: ['./index.component.css']
})
export class IndexComponent implements OnInit  {
    @Input()
    cache:LoginCache;
    user:User;

    constructor(
        private ls: LocalStorage,
        private authService: AuthService, 
        private route: ActivatedRoute,
        private location: Location
    ) {}

    ngOnInit(): void {
            this.cache = this.ls.getObject("logincache") ; 
    }
    tologin(): void { 
        this.ls.setObject("logincache",this.cache) ;
        this.authService.login(this.cache.account,this.cache.password)
                        .then(user => this.user);
    }

 }

我的其它博客將同步更新:
CSDN
簡書

github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,874評論 2 45
  • 大家好,請關(guān)注我的新作 multipages-generator今日發(fā)布??!媽媽再也不用擔(dān)心移動端h5網(wǎng)站搭建了!...
    yitalalww閱讀 67,886評論 72 123
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,555評論 19 139
  • 一些優(yōu)秀的應(yīng)用推薦網(wǎng)站和交流社區(qū),可能大家都知道。 酷安網(wǎng) 酷安網(wǎng)的評論是一大亮點。 酷安網(wǎng) - 發(fā)現(xiàn)應(yīng)用的樂趣 ...
    仙人撫我頂A閱讀 496評論 0 2
  • 首先申明,店主人在紐約,購物是有消費(fèi)稅的! 代購費(fèi)用:(商品的價格×10%的消費(fèi)稅+商品的價格×5%的代購費(fèi)+商品...
    清道夫閱讀 646評論 0 1

友情鏈接更多精彩內(nèi)容