【问题标题】:How to access Window & Document objects in Aurelia?如何访问 Aurelia 中的 Window 和 Document 对象?
【发布时间】:2016-06-03 11:15:17
【问题描述】:

ES6 / Aurelia 框架中访问DocumentWindow 对象的最佳方式是什么?我确实尝试在我的 Aurelia 代码中直接访问 window,它似乎确实有效,但这是正确的方法还是有 Aurelia/ES6 的方法?

具体来说,我想访问像window.localStoragewindow.sessionStorage 这样的属性。我刚开始使用 Aurelia 和 ES6,所以虽然我想遵循标准,但我对如何做到这一点有点小白。

类似于以下内容:

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

该代码实际上在 Aurelia 中工作,但这样编写是否正确?

【问题讨论】:

    标签: javascript ecmascript-6 aurelia


    【解决方案1】:

    这是在 Aurelia 中使用 Web API 时执行此操作的正确方法,因此您可以使用当前拥有的代码。

    但是,在使用 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 构建自己的实现,这些实现是针对其框架的结构和最佳实践量身定制的,但这不一定是最好的。

    【讨论】:

    • 我必须阅读您的答案两次才能了解我实际上以正确的方式使用它。您能否将句子的开头改写得更明确...谢谢您的回答:)
    • 这应该被标记为接受的答案。高度详细,平台抽象层在 Aurelia 依赖项和功能内部使用,因为它处理 DOM 中大多数事物的特征检测和回退。如果您只使用document.getElementById 或查询事物,那么 PAL 依赖关系可能会过大,但对于与使用不断发展的标准和其他功能(如 Shadow DOM)来事件和修改 DOM 相关的任何事情,肯定会使用平台抽象层。
    猜你喜欢
    • 2010-11-23
    • 2019-09-18
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2013-01-31
    • 2013-03-08
    • 2015-08-31
    • 2013-03-19
    相关资源
    最近更新 更多