2016-02-22 31 views
5

ES6/Aurelia框架中访问DocumentWindow对象的最佳方式是什么?我确实尝试直接在我的Aurelia代码中访问window,它似乎工作正常,但这是正确的方式还是存在Aurelia/ES6的方式?如何访问Aurelia中的窗口和文档对象?

具体而言,我想访问window.localStoragewindow.sessionStorage之类的属性。我刚刚开始使用Aurelia和ES6,所以我对如何做到这一点有点小菜,但我想遵循标准。

类似以下内容:

constructor() { 
    this.user = JSON.parse(window.sessionStorage.user || window.localStorage.user); 
} 

该代码实际上是在奥里利亚工作,但就是正确的是这样写呢?

回答

11

这是在使用Web API时在Aurelia中正确执行此操作的方式,因此您可以使用当前的代码。但是,在使用DOM时,当然也可以使用标准DOM API,但Aurelia具有平台抽象层(PAL docs),它将使用类似DOM的API抽象应用程序驻留的平台。

例如,document.getElementById相当于将

import {inject} from 'aurelia-framework' 
import {DOM} from 'aurelia-pal' 

@inject(DOM) 
export class Home { 
    constructor(DOM) { 
    this.DOM = DOM 
    } 

    attached() { 
    let element = this.DOM.getElementById('someId') 
    } 
} 

不幸的是,PAL是不是真的在做多的时刻,但在未来,计划让你与你的日常DOM API调用工作即使您的应用程序可能不在“正常”的DOM中运行。

一个非常重要的不要忘记的是,原生DOM & Web API真的很强大,并且使用它们的本地实现没有任何问题。其他框架倾向于围绕Web API来构建自己的实现,这些Web API是为其框架的结构和最佳实践量身打造的,但这并不一定是最好的。

+0

我不得不阅读你的答案两次,才能明白我实际上正在以正确的方式使用它。你能否也许可以用你的句子开头的句子来更清楚地说明......谢谢你的回答:) – ghiscoding

+0

这是一个很好的,详细的答案 –

+0

这应该被标记为接受的答案。高度详细且平台抽象层在Aurelia依赖性和功能性内部使用,因为它处理DOM中大多数事情的功能检测和回退。如果你正在使用''document.getElementById''或查询事物,PAL依赖可能是过度的,但对于使用不断发展的标准和其他功能(如Shadow DOM)进行事件和修改DOM的任何事情,必须使用Platform Abstraction Layer 。 –

相关问题