AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

Perguntas[angular](coding)

Martin Hope
Nathan30
Asked: 2025-04-29 22:55:20 +0800 CST

Solicitação angular duplicada se o erro for gerado

  • 5

Tenho um comportamento estranho com minhas requisições. Se a requisição gerar um erro, uma segunda requisição será iniciada automaticamente.

insira a descrição da imagem aqui

Aqui está um exemplo da minha solicitação:

this.http.post(environment['url'] + '/ws/verifier/documents/list', {}, {headers}).pipe(
    tap((data: any) => {
        ....
    }),
    finalize(() => {
        ....
    }),
    catchError((err: any) => {
        console.debug(err);
        this.notify.handleErrors(err);
        return of(false);
    })
).subscribe();

Como posso fazer para evitar essa solicitação duplicada se um erro for gerado?

Obrigado

EDIT: Eu tenho este interceptador. Usado para atualizar o token se o erro 401 for gerado. Mas se for outro erro, a solicitação é reenviada. Existe alguma solução para evitar isso?

intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
    return next.handle(request).pipe(
        catchError((err: any) => {
            if (err.status === 401) {
                return this.handle401Error(request, next);
            }
            return next.handle(request);
        })
    );
}
angular
  • 1 respostas
  • 55 Views
Martin Hope
Arnab Mukherjee
Asked: 2025-04-29 14:31:16 +0800 CST

Adicionando atraso no HttpTestingController - Teste de unidade Angular

  • 5

Tentando validar o tempo limite de consultas ao banco de dados, não é possível obtê-lo via HttpTestingController.

Não tenho certeza de como projetar o UT. Onde adicionar o tempo limite nesta configuração?

    it('test timeout', () => {

        service.getData('2025-10-12', '2025-10-16').subscribe(
            {
                next: data => {
                    expect(data).not.toBeNull();
                },
                error: error => {
                    expect(error).toBeNull(); // handling all missing keys
                }
            }
        );

        // mocking endpoint - binding
        const response = httpController.expectOne({
            method: 'GET',
            url: RestServerSA.RELEASES_OVERVIEW_RANGE
        });

        // mocking response from endpoint
        response.flush({});
    });
angular
  • 1 respostas
  • 48 Views
Martin Hope
davood beheshti
Asked: 2025-04-28 23:53:47 +0800 CST

ERRO TypeError: Não é possível ler propriedades de nulo (lendo 'offsetHeight') no primeng MenuModule

  • 6

Estou usando MenuModule o Primeng

O modelo dentro do Menu é do tipo sinal

E é retirado do serviço

Agora, quando o serviço é chamado e o modelo é preenchido, este erro é exibido

ERROR TypeError: Cannot read properties of null (reading 'offsetHeight')

//Código HTML

<h1 (click)="statusDispacherClick(213 , $event)">
    Status Click
</h1>
<p-menu #menu [model]="listStatusTypes()" [popup]="true" />

//Código TypeScript

  @ViewChild('menu') menu !: Menu;
  listStatusTypes = signal<any[]>([])

  statusDispacherClick(data, event) {
    this.service.getDashboardChangeStatusTypes(data).subscribe(dataService => {
      dataService.map(x => {
        x.label = x.title;
      })
      this.listStatusTypes.set(dataService);
      this.cdRef.detectChanges();
      this.menu.toggle(event);
    })
  }
angular
  • 2 respostas
  • 38 Views
Martin Hope
kibet
Asked: 2025-04-25 15:35:53 +0800 CST

Os dados não estão sendo exibidos no modelo, mas os dados são obtidos

  • 6

Estou tentando exibir dados usando rxResource. No entanto, os dados retornados são sempre indefinidos. Ao inspecionar as guias de rede, porém, vejo que os dados estão sendo buscados e que estou apenas fazendo algo errado no meu componente. Qual é o problema com este código? Porque não consigo encontrar o problema.

Serviço de API

import { HttpClient } from '@angular/common/http';
import { inject, Injectable } from '@angular/core';
import { httpResource } from "@angular/common/http";

@Injectable({
  providedIn: 'root'
})
export class ApiService {
  private readonly httpClient = inject(HttpClient);

  public GET<T>(path: string, options?: any) {
    return this.httpClient.get<T>(path, options);
  }

Arquivo de componente:

import { Component, inject, signal } from '@angular/core';
import { ApiService } from '@services/api.service';
import { rxResource, toSignal } from '@angular/core/rxjs-interop';
import { distinctUntilChanged, map } from 'rxjs';

@Component({
  selector: 'app-blogs',
  templateUrl: './blogs.component.html',
  styleUrl: './blogs.component.scss'
})
export class BlogsComponent {

  apiService = inject(ApiService)
  query = signal('')

  rxBlog = rxResource({
    request: () => this.query(),
    loader: () =>
    this.apiService.GET(`https://api.nationalize.io/?name=${this.query()}`)
    .pipe(
      distinctUntilChanged(),
      map((blogs) => blogs),
    )
  })

  search(event: Event) {
    const { value } = event.target as HTMLInputElement;
    this.query.set(value);
  }
} 
 

// Template
<p>blogs works!</p>

<input (input)="search($event)" placeholder="Search user..."/>
    
    <br />
    <ul>
      @let error = rxBlog.error();

      @if (error) {
        <p>{{ error }}</p>
      }

      @if (rxBlog.isLoading()) {
        <p>Loading Blogs...</p>
      }

      @for (blog of (rxBlog.value()).country) {
        {{blog.country_id}}
      }
      
    </ul>

Os dados JSON têm a seguinte aparência:

{
  "count": 22997,
  "name": "steve",
  "country": [
    {
      "country_id": "KE",
      "probability": 0.0728971981962264
    },
  ]
}
angular
  • 1 respostas
  • 48 Views
Martin Hope
bradrice
Asked: 2025-04-24 04:22:19 +0800 CST

Como faço para retornar duas solicitações http sequencialmente em rxjs e usar dados da primeira na segunda chamada?

  • 7

Eu escrevi uma função http que funciona usando o switch map para obter o valor de uma solicitação http e usá-lo como um parâmetro na segunda, mas como faço para retornar não apenas a solicitação http final, mas também os dados da primeira?

Aqui está minha função:

      .post<RxObservable<unknown>>(
        `${this.nextApiEndpoint}ProgramReview/GetAssessmentQuestionNumber`,
        body,
        {}
      )
      .pipe(
        switchMap((data) => {
          return this.http.post<any>(
            `${this.nextApiEndpoint}ProgramReview/GetProgramReviewQuestion`,
            { studentId: args.studentId, questionId: data, programReviewId: args.programReviewId },
            {}
          );
        }),
        catchError((err) => {
          return err;
        })
      );
  }

Eu assino está no componente e obtenho os dados de retorno da solicitação http final, mas também quero passar os dados da primeira solicitação para assinar no componente.

angular
  • 1 respostas
  • 46 Views
Martin Hope
Aleksandra
Asked: 2025-04-22 22:49:53 +0800 CST

Problemas de compilação de migração Taiga UI v3> v4

  • 6

Fiz a migração do Taiga UI v3 para o v4, adicionei alguns pacotes (com o Yarn), atualizei o código de acordo, resolvi todos os outros erros depois de executar o projeto (Angular), mas ainda há este erro que não entendo:

...
Build at: 2025-04-22T14:47:34.441Z - Hash: fe6fe04f860facf1 - Time: 2234ms

./node_modules/@taiga-ui/kit/fesm2022/taiga-ui-kit-components-input-number.mjs:209:37-68 - Error: export 'maskitoInitialCalibrationPlugin' (imported as 'maskitoInitialCalibrationPlugin') was not found in '@maskito/core' (possible exports: MASKITO_DEFAULT_ELEMENT_PREDICATE, MASKITO_DEFAULT_OPTIONS, Maskito, maskitoPipe, maskitoTransform)

./node_modules/@taiga-ui/kit/fesm2022/taiga-ui-kit-components-input-phone-international.mjs:245:122-153 - Error: export 'maskitoInitialCalibrationPlugin' (imported as 'maskitoInitialCalibrationPlugin') was not found in '@maskito/core' (possible exports: MASKITO_DEFAULT_ELEMENT_PREDICATE, MASKITO_DEFAULT_OPTIONS, Maskito, maskitoPipe, maskitoTransform)

./node_modules/@taiga-ui/legacy/fesm2022/taiga-ui-legacy-components-input-date-time.mjs:372:34-63 - Error: export 'maskitoSelectionChangeHandler' (imported as 'maskitoSelectionChangeHandler') was not found in '@maskito/kit' (possible exports: maskitoAddOnFocusPlugin, maskitoCaretGuard, maskitoDateOptionsGenerator, maskitoDateRangeOptionsGenerator, maskitoDateTimeOptionsGenerator, maskitoEventHandler, maskitoNumberOptionsGenerator, maskitoParseNumber, maskitoPostfixPostprocessorGenerator, maskitoPrefixPostprocessorGenerator, maskitoRejectEvent, maskitoRemoveOnBlurPlugin, maskitoTimeOptionsGenerator, maskitoWithPlaceholder)

./node_modules/@taiga-ui/legacy/fesm2022/taiga-ui-legacy-components-input-number.mjs:314:37-68 - Error: export 'maskitoInitialCalibrationPlugin' (imported as 'maskitoInitialCalibrationPlugin') was not found in '@maskito/core' (possible exports: MASKITO_DEFAULT_ELEMENT_PREDICATE, MASKITO_DEFAULT_OPTIONS, Maskito, maskitoPipe, maskitoTransform)

./node_modules/@taiga-ui/legacy/fesm2022/taiga-ui-legacy-components-input-time.mjs:413:34-63 - Error: export 'maskitoSelectionChangeHandler' (imported as 'maskitoSelectionChangeHandler') was not found in '@maskito/kit' (possible exports: maskitoAddOnFocusPlugin, maskitoCaretGuard, maskitoDateOptionsGenerator, maskitoDateRangeOptionsGenerator, maskitoDateTimeOptionsGenerator, maskitoEventHandler, maskitoNumberOptionsGenerator, maskitoParseNumber, maskitoPostfixPostprocessorGenerator, maskitoPrefixPostprocessorGenerator, maskitoRejectEvent, maskitoRemoveOnBlurPlugin, maskitoTimeOptionsGenerator, maskitoWithPlaceholder)


✖ Failed to compile.

Alguns pacotes estavam faltando em node_modules, então adicionei cada um manualmente, e agora esses são os únicos erros restantes. O que posso fazer com isso?

Veja como as dependências do package.json estão agora:

"dependencies": {
    "@angular-builders/custom-webpack": "18.0.0",
    "@angular/animations": "18.2.9",
    "@angular/cdk": "18.2.9",
    "@angular/common": "18.2.9",
    "@angular/compiler": "18.2.9",
    "@angular/core": "18.2.9",
    "@angular/forms": "18.2.9",
    "@angular/platform-browser": "18.2.9",
    "@angular/platform-browser-dynamic": "18.2.9",
    "@angular/router": "18.2.9",
    "@auth0/auth0-angular": "2.2.3",
    "@aws-sdk/client-s3": "3.627.0",
    "@aws-sdk/lib-storage": "3.627.0",
    "@aws-sdk/s3-request-presigner": "3.627.0",
    "@bigchaindb/wallet-hd": "0.4.3",
    "@bigchaindb/wallet-plugins": "0.4.5",
    "@jenniferplusplus/opentelemetry-instrumentation-bullmq": "0.5.0",
    "@maskito/angular": "1.9.0",
    "@maskito/core": "1.9.0",
    "@maskito/kit": "1.9.0",
    "@maskito/phone": "3.7.1",
    "@nestjs/axios": "3.1.3",
    "@nestjs/bullmq": "10.2.3",
    "@nestjs/cache-manager": "2.3.0",
    "@nestjs/common": "10.4.15",
    "@nestjs/config": "3.3.0",
    "@nestjs/core": "10.4.15",
    "@nestjs/event-emitter": "2.1.1",
    "@nestjs/microservices": "10.4.15",
    "@nestjs/passport": "10.0.3",
    "@nestjs/platform-express": "10.4.15",
    "@nestjs/schedule": "3.0.3",
    "@nestjs/swagger": "7.2.0",
    "@nestjs/terminus": "10.2.3",
    "@nestjs/throttler": "4.2.1",
    "@nestjs/typeorm": "10.0.2",
    "@ng-web-apis/common": "4.12.0",
    "@ng-web-apis/intersection-observer": "4.12.0",
    "@ng-web-apis/mutation-observer": "4.12.0",
    "@ng-web-apis/platform": "4.12.0",
    "@ng-web-apis/resize-observer": "4.12.0",
    "@ng-web-apis/screen-orientation": "4.12.0",
    "@ngneat/tailwind": "7.0.3",
    "@ngneat/transloco": "4.3.0",
    "@ngneat/transloco-keys-manager": "3.8.0",
    "@ngneat/transloco-locale": "4.1.0",
    "@ngneat/transloco-persist-lang": "4.0.0",
    "@ngneat/transloco-validator": "3.0.1",
    "@opentelemetry/api": "1.7.0",
    "@opentelemetry/exporter-trace-otlp-grpc": "0.47.0",
    "@opentelemetry/instrumentation-amqplib": "0.33.5",
    "@opentelemetry/instrumentation-aws-sdk": "0.37.2",
    "@opentelemetry/instrumentation-dns": "0.32.5",
    "@opentelemetry/instrumentation-express": "0.34.1",
    "@opentelemetry/instrumentation-generic-pool": "0.32.5",
    "@opentelemetry/instrumentation-http": "0.47.0",
    "@opentelemetry/instrumentation-ioredis": "0.36.1",
    "@opentelemetry/instrumentation-nestjs-core": "0.33.4",
    "@opentelemetry/instrumentation-net": "0.32.5",
    "@opentelemetry/instrumentation-pg": "0.37.2",
    "@opentelemetry/instrumentation-pino": "0.34.5",
    "@opentelemetry/resources": "1.20.0",
    "@opentelemetry/sdk-node": "0.47.0",
    "@opentelemetry/sdk-trace-base": "1.20.0",
    "@opentelemetry/semantic-conventions": "1.20.0",
    "@rx-angular/cdk": "16.0.0",
    "@rx-angular/state": "16.0.0",
    "@rx-angular/template": "16.0.1",
    "@s1seven/cluster-service": "0.15.5",
    "@s1seven/custom-schema-tools-certificate-summary": "0.2.0",
    "@s1seven/custom-schema-tools-extract-emails": "0.1.1",
    "@s1seven/custom-schema-tools-generate-tkr-pdf-template": "0.2.0",
    "@s1seven/custom-schema-tools-types": "0.1.1",
    "@s1seven/nestjs-tools-access-control": "0.1.15",
    "@s1seven/nestjs-tools-amqp-transport": "0.5.1",
    "@s1seven/nestjs-tools-async-local-storage": "0.2.2",
    "@s1seven/nestjs-tools-file-storage": "0.8.0",
    "@s1seven/nestjs-tools-lock": "0.7.0",
    "@s1seven/pino-heroku-pipeline": "0.1.1",
    "@s1seven/schema-tools-validate": "0.3.16",
    "@sendgrid/eventwebhook": "8.0.0",
    "@sendgrid/mail": "8.1.4",
    "@sentry/angular": "7.118.0",
    "@sentry/integrations": "7.118.0",
    "@sentry/node": "7.118.0",
    "@sentry/opentelemetry": "7.118.0",
    "@sentry/profiling-node": "7.118.0",
    "@sentry/types": "7.118.0",
    "@splitbee/web": "0.3.0",
    "@taiga-ui/cdk": "4.32.0",
    "@taiga-ui/core": "4.32.0",
    "@taiga-ui/event-plugins": "4.5.1",
    "@taiga-ui/i18n": "4.32.0",
    "@taiga-ui/icons": "4.32.0",
    "@taiga-ui/kit": "4.32.0",
    "@taiga-ui/layout": "4.32.0",
    "@taiga-ui/legacy": "4.32.0",
    "@taiga-ui/polymorpheus": "4.9.0",
    "@taiga-ui/styles": "4.32.0",
    "@tinkoff/ng-dompurify": "4.0.0",
    "@tinkoff/ng-polymorpheus": "4.3.0",
    "ajv": "8.16.0",
    "ajv-formats": "3.0.1",
    "amqp-connection-manager": "4.1.14",
    "amqplib": "0.10.3",
    "auth0": "4.13.0",
    "axios": "1.7.9",
    "axios-retry": "4.5.0",
    "bigchaindb-driver": "4.3.0",
    "body-parser": "1.20.2",
    "bs58": "5.0.0",
    "bullmq": "4.8.0",
    "cache-manager": "5.3.2",
    "cache-manager-ioredis-yet": "1.2.2",
    "chalk": "4.1.2",
    "class-transformer": "0.5.1",
    "class-validator": "0.14.1",
    "cookie-parser": "1.4.7",
    "country-code-lookup": "0.1.1",
    "date-fns": "2.30.0",
    "dotenv": "16.3.2",
    "dotenv-expand": "10.0.0",
    "express": "4.19.2",
    "express-rate-limit": "7.4.1",
    "handlebars": "4.7.8",
    "helmet": "8.0.0",
    "hyperid": "3.1.1",
    "ioredis": "5.3.2",
    "json-stable-stringify": "1.1.1",
    "jwks-rsa": "3.1.0",
    "lato-font": "3.0.0",
    "lodash": "4.17.21",
    "lodash.clonedeepwith": "4.5.0",
    "loopbench": "2.0.0",
    "lru-cache": "10.1.0",
    "mime": "3.0.0",
    "minimatch": "9.0.3",
    "mqtt": "5.3.6",
    "nestjs-asyncapi": "1.2.1",
    "nestjs-pino": "4.0.0",
    "nestjs-throttler-storage-redis": "0.4.1",
    "nestjs-typeorm-paginate": "4.0.4",
    "node-cache": "5.1.2",
    "otpauth": "9.2.2",
    "papaparse": "5.4.1",
    "passport": "0.7.0",
    "passport-jwt": "4.0.1",
    "pg": "8.11.3",
    "pg-query-stream": "4.5.3",
    "pino": "8.17.2",
    "pino-datadog-transport": "1.3.2",
    "pino-http": "9.0.0",
    "pino-pretty": "10.3.1",
    "qrcode": "1.5.3",
    "query-string": "7.1.3",
    "reflect-metadata": "0.2.1",
    "rxjs": "7.8.1",
    "semver": "7.5.4",
    "semver-lite": "0.0.6",
    "swagger-ui-express": "5.0.0",
    "tar": "6.2.1",
    "ts-mixer": "6.0.4",
    "tslib": "2.6.2",
    "tweetnacl-util": "0.15.1",
    "typeorm": "0.3.19",
    "typeorm-encrypted": "0.8.0",
    "zone.js": "0.14.10"
  },
angular
  • 1 respostas
  • 34 Views
Martin Hope
Zed
Asked: 2025-04-22 20:44:26 +0800 CST

Problema com patchValue e sinais async no Angular quando o usuário atualiza a página

  • 7

Estou trabalhando com o novo recurso Sinais do Angular para gerenciar o estado reativo em um formulário.

Tudo funciona bem na maioria dos casos. No entanto, estou enfrentando um problema:

Quando um usuário atualiza a página enquanto estiver no formulário, o componente é recarregado. Os dados que deveriam preencher o formulário são buscados de forma assíncrona e expostos por meio de um Signal. Mas o formulário é inicializado antes que o sinal obtenha seu valor.

Então, quando eu chamo form.patchValue(...)durante ngOnInit, os valores do sinal ainda são undefined.

Também considerei usar um effect() para atualizar o formulário de forma reativa quando o sinal muda, mas, de acordo com a documentação do Angular, effect() não foi criado para esse tipo de lógica.


// user userApplication Component
  get customer(): Signal<Customer | null> {
    return this._store.customer;
  }

// form Component

ngOnInit(): void {
    const customer = this.userApplication.customer();
    if (customer && customer.identity) {
      const identity = customer.identity;
      this.identity.patchValue({
        title: identity.title,
        firstName: identity.firstName,

      });
    }
  }

  

  identity = inject(FormBuilder).group({
    title: new FormControl<string | null>(null),
    firstName: new FormControl<string>('', [Validators.required]),
   
  });
angular
  • 1 respostas
  • 45 Views
Martin Hope
derstauner
Asked: 2025-04-22 17:08:46 +0800 CST

erro "a expressão foi alterada após ser verificada", apesar de ter a configuração correta

  • 5

Estou enfrentando o erro expression has changed after it was checked. Sei que esta verificação só é executada no modo de desenvolvimento (executa duas vezes) e que não terei a mensagem de erro no modo de produção. Mas quero saber por que isso acontece.

Eu tenho um serviço de carregador baseado em sinal como este:

import { Injectable, signal } from '@angular/core';

@Injectable({ providedIn: 'root' })
export class LoaderService {
  private _isLoading = signal<boolean>(false);

  get isLoading(): boolean {
    return this._isLoading();
  }

  show() {
    this._isLoading.update(() => true);
  }

  hide() {
    this._isLoading.update(() => false);
  }
}

Eu também tenho este interceptador:

import {
  HttpEvent,
  HttpHandler,
  HttpInterceptor,
  HttpRequest,
  HttpResponse,
} from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, catchError, map, throwError } from 'rxjs';
import { USE_LOADING_SPINNER } from '../constants/app.constants';
import { LoaderService } from '../../shared/services/loader.service';

@Injectable()
export class LoadingInterceptor implements HttpInterceptor {
  constructor(private loaderService: LoaderService) {}

  intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    if (req.context.get(USE_LOADING_SPINNER)) this.loaderService.show();

    return next.handle(req).pipe(
      map((event: HttpEvent<any>) => {
        if (event instanceof HttpResponse) this.loaderService.hide();
        return event;
      }),
      catchError((error) => {
        this.loaderService.hide();
        return throwError(() => error);
      })
    );
  }
}

O USE_LOADING_SPINNERé sempre definido como verdadeiro, o que significa que tenho que marcar apenas as solicitações em que não quero ter nenhum indicador de carregamento.

Como o LoaderServiceé baseado em sinal, registro um effectno construtor de um componente como este:

constructor() {
    effect(() => {
      this.loading = this.loaderService.isLoading;
    });
  }

Observe que a loadingvariável não é um sinal, é uma variável booleana pura, já que o isLoadingmétodo retorna um valor booleano, não um sinal.

E no modelo eu tenho isso em um componente de grade:

[loading]="loading"

Esta configuração está funcionando. No roteamento inicial, o indicador de carregamento está sendo exibido.

Agora adiciono um método de atualização ao componente como este:

refresh() {
    //this.loaderService.show();
    this.gridData$ = this.userService.getUsers();
    //.pipe(tap(() => this.loaderService.hide()));
  }

Mas se eu clicar em atualizar, aparece o erro no título do tópico e o indicador de carregamento não aparece. O interceptador é acionado, eu verifiquei isso.

Mas se eu descomentar as chamadas, loaderServiceele funciona como esperado.

Por que recebo esse erro?

angular
  • 2 respostas
  • 64 Views
Martin Hope
Otto Abnormalverbraucher
Asked: 2025-04-22 08:04:26 +0800 CST

Como defino um array vazio como valor padrão no toSignal?

  • 5

Tenho um serviço DataHandler que chama um serviço de banco de dados e retorna o valor para o componente que faz a chamada. O serviço de banco de dados retorna um observável de um array, enquanto eu gostaria que o manipulador de dados retornasse um sinal do mesmo array pronto para uso pelo componente. Portanto, estou tentando usar a função toSignal do Angular, mas quando defino um array vazio como valor inicial, recebo o seguinte erro:

Type 'never[]' is not assignable to type 'undefined'.

Pelo que entendi, o TypeScript não consegue encontrar o tipo do array vazio, então ele tenta definir o tipo do array para o tipo mencionado never[]. No entanto, estou definindo o tipo duas vezes. Na chamada de função do Manipulador de Dados, o tipo de retorno é definido como:

public readOverview(type: DataType): Observable<DataEntry[]> { ... }

Portanto, o Observable retornado tem o tipo DataEntry[]. O tipo também é definido especificamente na chamada de função toSignal que estou fazendo no manipulador de dados:

return toSignal<DataEntry[]>(this._dbFacade.readOverview(type), { initialValue: [] });

Na minha opinião, o TypeScript definitivamente deveria ser capaz de encontrar o tipo DataEntry[] para o array inicial vazio. No entanto, não consegue. Então, o que preciso fazer para que ele encontre o tipo correto e consiga usar um array vazio como valor inicial?

angular
  • 1 respostas
  • 59 Views
Martin Hope
derstauner
Asked: 2025-04-22 00:54:56 +0800 CST

Filtrar observável sem disparar solicitação HTTP

  • 5

Eu preencho uma grade com a seguinte linha de código:

this.gridData$ = this.userService.getUsers();

e este é o HTML correspondente:

[kendoGridBinding]="(gridData$ | async)!"

Funciona como esperado.

Também tenho um botão de exclusão. Clicar nele exclui o usuário. Depois disso, quero remover o usuário da lista, mas sem fazer uma solicitação HTTP extra. Tentei shareReplay, mas a solicitação extra está lá:

this.gridData$ = this.gridData$.pipe(
              shareReplay({ bufferSize: 1, refCount: true }),
              map((users) => {
                return users.filter(
                  (user) => user.userId !== this.currentDataItem.userId
                );
              })
            );

Como filtrar os dados da grade para excluir o usuário excluído sem nenhuma solicitação HTTP adicional? Ou devo armazenar os usuários em uma variável local no init e modificar o array ao adicionar, editar ou excluir e convertê-lo em um observável?

angular
  • 3 respostas
  • 85 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve