2016-02-22 57 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 。 –

相關問題