Удалить атрибут/элемент из обнаружения изменений в Angular

Предположим, у меня есть это в моем шаблоне:

<img src="..." alt="myService.getImgAlt()" />

Это работает... Но при каждом обнаружении изменений эта функция будет вызываться, что плохо сказывается на производительности. Можно ли удалить этот атрибут (или весь элемент) из обнаружения изменений после первого вызова getImgAlt()?

Я хочу вызвать myService напрямую из шаблона, а это значит, что нужен вызов функции, и я не могу просто использовать переменную из компонента. Компонент просто определяет службу, поэтому шаблон имеет к ней доступ:

export class MyComponent {

    constructor(public myService: MyService) {}

person BigJ    schedule 12.12.2020    source источник
comment
Отвечает ли это на ваш вопрос? функция вызывается несколько раз   -  person R. Richards    schedule 12.12.2020
comment
@R.Richards Позвольте мне проверить, потому что я не хочу использовать переменные и хочу вызывать службу из шаблона. Может трубка и работает, надо проверить.   -  person BigJ    schedule 12.12.2020
comment
Либо создайте альтернативный текст в ngOnit, либо напишите канал.   -  person David Bulté    schedule 12.12.2020
comment
@DavidBulté Я попробую трубку и опубликую ответ, если у меня получится. Я уверен, что это будет полезно для других.   -  person BigJ    schedule 13.12.2020
comment
@R.Richards Почти, но не полностью: в этом ответе не использовалась служба в канале, что меня сбило с толку, но, очевидно, можно вызвать службу из канала.   -  person BigJ    schedule 23.12.2020


Ответы (1)


Вы можете использовать (чистый) канал, потому что оттуда вы можете вызывать службу, и канал выполняется только один раз:

@Pipe({ name: 'myPipe' })
export class MyPipe implements PipeTransform {

    constructor(private someService: SomeService) {}

    transform(someExampleId: string): string {

        return this.someService.getSomething(someExampleId);

    }

}

Чтобы использовать для конвейера в шаблоне:

<img src="..." alt="{{ '1234' | myPipe }}" />

Поскольку ввод в канал (1234) не меняется, канал выполняется только один раз, что хорошо для производительности.

person BigJ    schedule 23.12.2020