Ошибка AOT при создании пользовательского компонента-декоратора - Angular 5 - PullRequest
0 голосов
/ 17 октября 2018

Я создал собственный декоратор компонентов, как описано здесь Наследование компонентов Angular 5 с переопределением свойств декоратора .

    import { Component } from '@angular/core';

    export function ExtendedComponent(extendedConfig: Component = {}) {
        return function (target: Function) {
            const annotations = target['__annotations__'] || [],
                  parameters = target['__paramaters__'] || [],
                  propMetadata = target['__prop__metadata__'] || [];

            if (annotations.length > 0) {
                const parentAnnotations = Object.assign({}, annotations[0]);

                Object.keys(parentAnnotations).forEach(key => {
                    if (parentAnnotations.hasOwnProperty(key)) {
                        if (!extendedConfig.hasOwnProperty(key)) {
                            extendedConfig[key] = parentAnnotations[key];
                            annotations[0][key] = '';
                        } else {
                            if (extendedConfig[key] === parentAnnotations[key]){
                                 annotations[0][key] = '';
                            }
                        }
                    }
                });
            }

            return Component(extendedConfig )(target);
        };
    }

Используется:

    @ExtendedComponent({
        selector: 'app-auto-complete',
    })
    export class AutoCompleteComponent extends AutoComplete {

        constructor() {
            super();
        }

        ngOnInit() {
        }
    }

Он отлично работает в режиме разработки, но когда я пытаюсь его построить, я получаю следующую ошибку:

    ERROR in : Can't bind to 'suggestions' since it isn't a known         property of 'cds-auto-complete'.
    1. If 'cds-auto-complete' is an Angular component and it has 'suggestions' input, then verify that it is part of this module.
    2. If 'cds-auto-complete' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
    3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component. ("...

Я попытался добавить CUSTOM_ELEMENTS_SCHEMA & NO_ERRORS_SCHEMA, но это не помогает.Есть идеи по решению?

1 Ответ

0 голосов
/ 17 октября 2018

Пользовательские декораторы, подобные этим, не работают в AOT, потому что компилятор ищет классы, которые имеют декоратор @Component.Чтобы это исправить, вы также должны добавить к классу @Component() декоратор (и удалить Component(extendedConfig)(target) в своем кастомном декораторе):

@Component({...})
@ExtendedComponent({
    selector: 'app-auto-complete',
})
export class AutoCompleteComponent extends AutoComplete {}

Но я полагаю, что это своего рода побеждает цель вашего расширенногоcomponent.

Вы можете увидеть полный выпуск github здесь .Это не совсем та же проблема, но это та же самая причина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...