如何设置和获取angular2-localstorage?
How to Set & Get in angular2-localstorage?
从这个repo,我已经成功配置了这个:
import {Component} from "angular2/core";
import {LocalStorageService} from "angular2-localstorage/LocalStorageEmitter";
@Component({
provider: [LocalStorageService]
})
export class AppRoot{
constructor(private storageService: LocalStorageService){}
...
}
如何使用storageService设置或获取本地存储?即使在文档中,我也找不到任何示例。
已更新
经过一些测试,我设法让它通过 WebStorage 与 Decorator 一起工作:
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class LoginComponent implements OnInit {
@LocalStorage() public username:string = 'hello world';
ngOnInit() {
console.log('username', this.username);
// it prints username hello world
}
}
然而,当我使用 Chrome Dev 查看我的本地存储时,我在那里什么也看不到:
并且在另一个组件中,
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class DashboardComponent implements OnInit {
@LocalStorage() public username:string;
ngOnInit() {
console.log(this.username);
// it prints null
}
}
查看 GitHub 页:https://github.com/marcj/angular2-localstorage
告诉我们这样使用它:
示例 1
import {LocalStorage} from "angular2-localstorage/WebStorage";
@Component({
selector: 'app-login',
template: `
<form>
<div>
<input type="text" [(ngModel)]="username" placeholder="Username" />
<input type="password" [(ngModel)]="password" placeholder="Password" />
</div>
<input type="checkbox" [(ngModel)]="rememberMe" /> Keep me logged in
<button type="submit">Login</button>
</form>
`
})
class AppLoginComponent {
//here happens the magic. `username` is always restored from the localstorage when you reload the site
@LocalStorage() public username:string = '';
public password:string;
//here happens the magic. `rememberMe` is always restored from the localstorage when you reload the site
@LocalStorage() public rememberMe:boolean = false;
}
示例 2
import {LocalStorage} from "angular2-localstorage/WebStorage";
@Component({
selector: 'admin-menu',
template: `
<div *ngFor="#menuItem of menuItems() | mapToIterable; #i = index">
<h2 (click)="hiddenMenuItems[i] = !!!hiddenMenuItems[i]">
{{i}}: {{category.label}}
</h2>
<div style="padding-left: 15px;" [hidden]="hiddenMenuItems[i]">
<a href>Some sub menu item 1</a>
<a href>Some sub menu item 2</a>
<a href>Some sub menu item 3</a>
</div>
</div>
`
})
class AdminMenuComponent {
public menuItems = [{title: 'Menu1'}, {title: 'Menu2'}, {title: 'Menu3'}];
//here happens the magic. `hiddenMenuItems` is always restored from the localstorage when you reload the site
@LocalStorage() public hiddenMenuItems:Array<boolean> = [];
//here happens the magic. `profile` is always restored from the sessionStorage when you reload the site from the current tab/browser. This is perfect for more sensitive information that shouldn't stay once the user closes the browser.
@SessionStorage() public profile:any = {};
}
更新
如果你想在你的所有组件中使用它,你需要创建一个共享服务:
import {LocalStorage} from "angular2-localstorage/WebStorage";
@Injectable()
export class MyStorageService {
@LocalStorage() public username:string = '';
constructor() {}
}
并像这样使用它(尚未准备好复制和粘贴!)
export class Component1 {
private username: string;
constructor(private _storage: MyStorageService) {
this.username = this._storage.username;
}
}
export class Component2 {
private username: string;
constructor(private _storage: MyStorageService) {
this.username = this._storage.username;
}
}
来自文档:
Use the LocalStorage decorator
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
class MySuperComponent {
@LocalStorage() public lastSearchQuery:Object = {};
@LocalStorage('differentLocalStorageKey') public lastSearchQuery:Object = {};
}
你在这里:github
该服务仅导入到应用程序中,以便它可以 运行 初始化代码。
你应该使用它的方式是通过其他答案提到的装饰器。
请注意,这意味着您只需要将服务导入到您的最根 (app) 组件,而不是所有使用装饰器的组件。
更新
也尝试使用 instructions 第 2 步中的第一种方法,使用 bootstrap
而不是 AppComponent
。
很遗憾,这个库正在寻找新的维护者。所以不确定它有多可靠。
我知道已经有人回答了,但是,这个回答旨在让答案更容易理解。
首先,您需要在主文件中执行此操作:
import {LocalStorageService, LocalStorageSubscriber} from 'angular2-localstorage/LocalStorageEmitter';
var appPromise = bootstrap(MyRootAppComponent, [ LocalStorageService ]);
// register LocalStorage, this registers our change-detection.
LocalStorageSubscriber(appPromise);
然后给SET一个值,在你的组件中,你导入WebStorage:
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class LoginComponent implements OnInit {
@LocalStorage('username') public username:string;
//username as the parameter will help to use get function
ngOnInit() {
this.username = 'hello world';
console.log('username', this.username);
// it prints username hello world
}
}
要GET 从不同组件中的本地存储取回一个值,请执行以下操作:
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class DashboardComponent implements OnInit {
@LocalStorage('username') public username:string;
//need to pass your own key parameter to get the value
ngOnInit() {
console.log(this.username);
// it prints 'hello world'
}
}
检查你的chrome dev,你会保存localstorage:
你可以简单地按照下面的方式做
// 在你的任何 ts 文件中设置
localStorage.setItem('variablekey',value);
// 从任何其他 ts 文件获取
localStorage.getItem("variablekey");
// 如果你想要明确的价值那么
localStorage.removeItem("variablekey");
我更愿意创建一个单独的 Injectable 服务
import { Injectable } from '@angular/core';
@Injectable()
export class LocalStorageService {
constructor() {
//
}
public setData(key:string, data:any) {
localStorage.setItem(key, JSON.stringify(data));
}
public getData(key:string) {
return JSON.parse(localStorage.getItem(key));
}
public removeData(key:string) {
localStorage.removeItem(key);
}
}
在你的组件中
import { LocalStorageService } from './../../services/localStorageService';
@Component({
selector: 'member-claims-modal',
templateUrl: './view.html'
})
export class UserComponent {
constructor(private localStorageService:LocalStorageService) {
super();
}
public SampleMethod() {
let cloneData = {
'claims': 'hello'
};
this.localStorageService.setData('claims', cloneData);
let item=this.localStorageService.getData('claims');
consoloe.log(item);
this.localStorageService.removeData('claims');
}
}
从这个repo,我已经成功配置了这个:
import {Component} from "angular2/core";
import {LocalStorageService} from "angular2-localstorage/LocalStorageEmitter";
@Component({
provider: [LocalStorageService]
})
export class AppRoot{
constructor(private storageService: LocalStorageService){}
...
}
如何使用storageService设置或获取本地存储?即使在文档中,我也找不到任何示例。
已更新
经过一些测试,我设法让它通过 WebStorage 与 Decorator 一起工作:
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class LoginComponent implements OnInit {
@LocalStorage() public username:string = 'hello world';
ngOnInit() {
console.log('username', this.username);
// it prints username hello world
}
}
然而,当我使用 Chrome Dev 查看我的本地存储时,我在那里什么也看不到:
并且在另一个组件中,
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class DashboardComponent implements OnInit {
@LocalStorage() public username:string;
ngOnInit() {
console.log(this.username);
// it prints null
}
}
查看 GitHub 页:https://github.com/marcj/angular2-localstorage
告诉我们这样使用它:
示例 1
import {LocalStorage} from "angular2-localstorage/WebStorage";
@Component({
selector: 'app-login',
template: `
<form>
<div>
<input type="text" [(ngModel)]="username" placeholder="Username" />
<input type="password" [(ngModel)]="password" placeholder="Password" />
</div>
<input type="checkbox" [(ngModel)]="rememberMe" /> Keep me logged in
<button type="submit">Login</button>
</form>
`
})
class AppLoginComponent {
//here happens the magic. `username` is always restored from the localstorage when you reload the site
@LocalStorage() public username:string = '';
public password:string;
//here happens the magic. `rememberMe` is always restored from the localstorage when you reload the site
@LocalStorage() public rememberMe:boolean = false;
}
示例 2
import {LocalStorage} from "angular2-localstorage/WebStorage";
@Component({
selector: 'admin-menu',
template: `
<div *ngFor="#menuItem of menuItems() | mapToIterable; #i = index">
<h2 (click)="hiddenMenuItems[i] = !!!hiddenMenuItems[i]">
{{i}}: {{category.label}}
</h2>
<div style="padding-left: 15px;" [hidden]="hiddenMenuItems[i]">
<a href>Some sub menu item 1</a>
<a href>Some sub menu item 2</a>
<a href>Some sub menu item 3</a>
</div>
</div>
`
})
class AdminMenuComponent {
public menuItems = [{title: 'Menu1'}, {title: 'Menu2'}, {title: 'Menu3'}];
//here happens the magic. `hiddenMenuItems` is always restored from the localstorage when you reload the site
@LocalStorage() public hiddenMenuItems:Array<boolean> = [];
//here happens the magic. `profile` is always restored from the sessionStorage when you reload the site from the current tab/browser. This is perfect for more sensitive information that shouldn't stay once the user closes the browser.
@SessionStorage() public profile:any = {};
}
更新
如果你想在你的所有组件中使用它,你需要创建一个共享服务:
import {LocalStorage} from "angular2-localstorage/WebStorage";
@Injectable()
export class MyStorageService {
@LocalStorage() public username:string = '';
constructor() {}
}
并像这样使用它(尚未准备好复制和粘贴!)
export class Component1 {
private username: string;
constructor(private _storage: MyStorageService) {
this.username = this._storage.username;
}
}
export class Component2 {
private username: string;
constructor(private _storage: MyStorageService) {
this.username = this._storage.username;
}
}
来自文档:
Use the LocalStorage decorator
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
class MySuperComponent {
@LocalStorage() public lastSearchQuery:Object = {};
@LocalStorage('differentLocalStorageKey') public lastSearchQuery:Object = {};
}
你在这里:github
该服务仅导入到应用程序中,以便它可以 运行 初始化代码。
你应该使用它的方式是通过其他答案提到的装饰器。
请注意,这意味着您只需要将服务导入到您的最根 (app) 组件,而不是所有使用装饰器的组件。
更新
也尝试使用 instructions 第 2 步中的第一种方法,使用 bootstrap
而不是 AppComponent
。
很遗憾,这个库正在寻找新的维护者。所以不确定它有多可靠。
我知道已经有人回答了,但是,这个回答旨在让答案更容易理解。
首先,您需要在主文件中执行此操作:
import {LocalStorageService, LocalStorageSubscriber} from 'angular2-localstorage/LocalStorageEmitter';
var appPromise = bootstrap(MyRootAppComponent, [ LocalStorageService ]);
// register LocalStorage, this registers our change-detection.
LocalStorageSubscriber(appPromise);
然后给SET一个值,在你的组件中,你导入WebStorage:
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class LoginComponent implements OnInit {
@LocalStorage('username') public username:string;
//username as the parameter will help to use get function
ngOnInit() {
this.username = 'hello world';
console.log('username', this.username);
// it prints username hello world
}
}
要GET 从不同组件中的本地存储取回一个值,请执行以下操作:
import {LocalStorage, SessionStorage} from "angular2-localstorage/WebStorage";
@Component({})
export class DashboardComponent implements OnInit {
@LocalStorage('username') public username:string;
//need to pass your own key parameter to get the value
ngOnInit() {
console.log(this.username);
// it prints 'hello world'
}
}
检查你的chrome dev,你会保存localstorage:
你可以简单地按照下面的方式做
// 在你的任何 ts 文件中设置
localStorage.setItem('variablekey',value);
// 从任何其他 ts 文件获取
localStorage.getItem("variablekey");
// 如果你想要明确的价值那么
localStorage.removeItem("variablekey");
我更愿意创建一个单独的 Injectable 服务
import { Injectable } from '@angular/core';
@Injectable()
export class LocalStorageService {
constructor() {
//
}
public setData(key:string, data:any) {
localStorage.setItem(key, JSON.stringify(data));
}
public getData(key:string) {
return JSON.parse(localStorage.getItem(key));
}
public removeData(key:string) {
localStorage.removeItem(key);
}
}
在你的组件中
import { LocalStorageService } from './../../services/localStorageService';
@Component({
selector: 'member-claims-modal',
templateUrl: './view.html'
})
export class UserComponent {
constructor(private localStorageService:LocalStorageService) {
super();
}
public SampleMethod() {
let cloneData = {
'claims': 'hello'
};
this.localStorageService.setData('claims', cloneData);
let item=this.localStorageService.getData('claims');
consoloe.log(item);
this.localStorageService.removeData('claims');
}
}