# Decorators API

通过注解快速创建 WebComponent 组件。

# Component

该注解用于快速定义组件,内部实现了一些较为底层的逻辑,包括各类生命周期钩子函数、虚拟dom、dom事件等。

# Example

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }
}

# Api

interface CustomTagOptions {
    name: string;
    is?: ComponentEnums;
    css?: string;
    options?: ElementDefinitionOptions;
}

# Emit

该装饰器用于自定义 dom 事件,底层基于 CustomEvent 实现。

# Example

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }

    @Emit('change')
    private change() {
        return {
            value: this.checked,
            name: this.name,
            label: this.label,
        };
    }
}

# Api

Emit 必须传入事件名。

# Watch

该装饰器用于组件内部的监听。

# Example

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }

    @Watch('checked')
    public checkedChange(val: any, oldVal: any) {}

}

# Api

Watch 目前仅支持一个参数,为需要监听的属性,函数包含俩参数新值和旧值。

# Prop

该装饰器用于定义 Attribute。

# Example

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }
    @Prop({ default: false, type: Boolean })
    public disabled: boolean;

}

# Api

export interface PropOptions {
    default?: any;
    type?: PropTyp;
}

# Inject

Inject 需要和 Provide 配套使用,Inject 用于接收父级组件注入的数据。

# Example

如案例中从父级组件中接受 wuFormRef 数据,最常见的需求如在定义 Form 表单时,单个表单列需要拿到 Form 组件实例(类似 ElForm 组件)。

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }

    @Inject("wuFormRef")
    public wuForm;
}

# Api

Inject 必须传入需要接收的变量名称。

# Provide

Provide 需要和 Inject 配套使用,Inject 用于向子孙组件注入数据。

# Example

如示例中向子孙组件注入一个名为 wuFormRef 的数据。

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }

    @Provide("wuFormRef")
    public provideParentDescTitle() {
        return this;
    }
}

# Api

Provide 的装饰对象必须是一个函数,该函数必须要有返回值,返回注入的数据。

# State

该装饰器用于定义组件内部的状态,用该注解装饰的属性和 Prop 一样,属性具备响应式的功能。

# Example

@Component({
    name: 'wu-test-example',
    css: css,
})
export class TestExample extends WuComponent {
    constructor() {
        super();
    }
    @State({ default: false, type: Boolean })
    public disabled: boolean;

}

# Api

export interface StateOptions {
    default?: any;
    type?: PropTyp;
}