在 Aurelia 中访问 DOM 元素

Access a DOM element in Aurelia

您将如何访问 Aurelia 中的 DOM 元素?这是一个广泛而普遍的问题,但我觉得有一种或两种首选方法可以做到这一点。我目前在 Aurelia 有两个病例:

在模板中我有一个表单。我想在 VM canDeactivate() 上访问视图模型中的表单元素,以中断用户离开半填写的表单。所以我试图访问元素的范围可以被认为是本地的。

在另一个视图模型中,我想隐藏 VM activate() 上的导航。导航驻留在另一个 view-model/template 对中,因此范围可以被认为是全局的。

按照 Rob 的建议,使用 ref。例如:

查看

<form ref="myForm"></form>

viewModel

class ViewModel { 

    canDeactivate() {
        var form = this.myForm;
        // do stuffs
    }
}

有关 ref 属性的详细信息,请参阅此处:http://aurelia.io/docs/binding/basics#function-references

使用绑定系统的 ref 功能。请参阅文档 http://aurelia.io/docs/binding/basics#referencing-elements

正如我在自己尝试使用它时遇到的另一点,ref 变量在构建过程中不可用,文档中也不清楚这一点。您可以在调用 attached 方法期间或之后随时开始引用上述元素 (http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-basics/5)。

另一种选择; 如果您的视图模型公开为 @customElement,它的 DOM 元素可以注入到构造函数中:

@customElement
@inject(Element)
export class MyCustomElement {
    constrctor(element) {
        logger.info(element) // ==> <my-custom-element></my-custom-element>
    }
}

Typescript 版本

@transient()
@autoinject
export class ViewModel { 
    myForm: any;
    canDeactivate() {
        var form = this.myForm;
        // do stuffs
    }
}