Angular 2本地存储无法找到名称。

3

我正在使用Angular CLI,尝试在注册组件中使用localStorage,但它无法正常工作,提示错误:找不到名称 'localStorage'。

以下是我的服务代码:

create(user: User) {
    return this.http.post('/signup', user, this.jwt(user)).map((response: Response) => response.json());
  }

  private jwt(user) {
    let currentUser = localStorage.setItem('currentUser', user);
    if (currentUser && currentUser.token) {
        let headers = new Headers({ 'Authorization': 'Bearer ' + currentUser.token });
        return new RequestOptions({ headers: headers });
    }
  }

我该如何修复这个问题?

1
let currentUser = localStorage.currentUser = user; - dandavis
3个回答

2
也许你需要在tsconfig.json中添加lib:dom
{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "../dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "es2016",
      "dom"
    ]
  }
}

(来源: tsconfig.json)


1

SetItem 是 void 类型,不返回任何内容。

setItem(key: string, data: string): void;

0

你的代码应该是:

create(user: User) {
    return this.http.post('/signup', user, this.jwt(user)).map((response: Response) => response.json());
  }

  private jwt(user) {
    let currentUser = user
    localStorage.setItem('currentUser', user);
    if (currentUser && currentUser.token) {
        let headers = new Headers({ 'Authorization': 'Bearer ' + currentUser.token });
        return new RequestOptions({ headers: headers });
    }
  }


但为什么要这样写 if (currentUser && currentUser.token) ? 如果这个 if 条件很关键,那么最好把 localStorage.setItem('currentUser', user) 这行代码放在它里面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接