Aurelia:是否有任何选项/装饰器将属性限制为特定元素

时间:2017-06-01 07:28:43

标签: aurelia aurelia-framework aurelia-templating

您好我创建了一个名为'panel'的自定义元素和一个自定义属性'panel-type'。我想限制这个'panel-type'只能在'panel'元素中使用。有没有办法做到这一点?

<panel value.bind='panel' panel-type='default'></panel>

- 应该工作。但没有其他元素可以使用'panel-type'。像 -

<some-other-tag panel-type='default'></some-other-tag>

- 不应该工作

1 个答案:

答案 0 :(得分:1)

如果没有看到自定义属性的代码 - 我无法根据您的具体需求进行定制 - 但这很容易实现;

在自定义属性中,您可以访问Element属性 - 这是您已将属性附加到的物理元素。因此,您只需使用本机JavaScript即可获取元素标记名称;

import {inject, LogManager} from "aurelia-framework";

@inject(Element)
export class panelTypeCustomAttribute {

    allowedElememt = false;

    constructor(Element) {
        this.element = Element;

        if(this.element.tagName == "PANEL") {
            this.allowedElement = true;
        } else {
            LogManager.getLogger('testCustomAttribute').warn("The panel-type custom attribute can only be used on <panel /> elements");
        }
    }

    foo() {
        // Then you can check for the allowedElement flag in any of your methods;
        if(this.allowedElement) {
            // Do your thing
        }
    }
 }