我的模板:

{{ announcements().start | date: "d MMM" }} -
{{ announcements().end | date: "mediumDate" }}

<button type="button" class="btn btn-primary" (click)="goForward()">
  <i class="bi bi-chevron-right"></i>
</button>

我的组件:

export class AnnouncementsComponent {
  readonly announcements: Signal<Announcements>;
  announcementsForm: FormGroup;
  constructor(
    private announcementsServ: AnnouncementsService,
    private logger: NGXLogger,
    private fb: FormBuilder,
  ) {
    this.announcements = this.announcementsServ.announcements.asReadonly();
    this.announcementsForm = this.fb.group({ content: '' });
    effect(() => {
      this.announcementsForm.setValue({
        content: this.announcements().content,
      });
    });
  }
  goForward() {
    this.announcementsServ.goForward();
  }
  goBackwards() {
    this.announcementsServ.goBackwards();
  }
  onSubmit() {
    this.announcementsServ.changeContent(this.announcementsForm.value.content);
  }
}

我的服务:

@Injectable()
export class AnnouncementsService {
  announcements: WritableSignal<Announcements>;
  constructor(private logger: NGXLogger) {
    this.announcements = signal({
      start: new Date('2023-08-27'),
      end: new Date('2023-09-03'),
      content: `some content`,
    });
  }

  changeDates(howMuch: number) {
    this.announcements.update((announcements: Announcements) => {
      announcements.start.setDate(announcements.start.getDate() + howMuch);
      announcements.end.setDate(announcements.end.getDate() + howMuch);
      return announcements;
    });
  }

  goForward() {
    this.changeDates(7);
  }
  goBackwards() {
    this.changeDates(-7);
  }

  changeContent(content: string) {
    this.logger.debug(content);
  }
}

Effect在组件和服务中都能成功执行,但模板不想更新.为什么?

我在另一个组件和服务中成功地使用了此模式,但使用的是布尔信号.是不是单一物体的信号有问题?

推荐答案

只有当日期是新的并且不是Mutations 时,管道才会重新呈现.https://angular.io/api/common/DatePipe#description

请注意,更改Date对象不会导致管道 再次渲染.若要确保管道被执行,必须创建 新建日期对象.

Angular相关问答推荐

将Angular Metal的芯片组件集成到我的表单中时出错

如何在Angular应用程序部署中安全地管理环境变量

将kendo—colorpicker的kendo弹出窗口附加到组件''

Angular 信号不更新afterNextender()

添加@ nx/webpack插件 destruct 了Nativescript构建

NG构建后多余的国旗

为什么我的自定义.d.ts不起作用?LeaderLine不是构造函数

如何在构造函数中测试MatDialog.Open

如何用ANGLE指令覆盖Html元素的数据绑定属性

具有多个输入的Angular struct 指令在第一次加载构件时没有值

Angular :为什么我得到了一个可观察到的共鸣

列表和映射的SCSS语法

如何修复不允许的HttpErrorResponse 405?

手动关闭 SSE 连接:Angular

Angular 无法从后端获取数据到前端

从 angular 11 升级到 angular 12 后,我的项目没有使用优化参数进行编译

Angular 2 二传手与 ngOnChanges

ngx-bootstrap modal:如何从模态中获取返回值?

Angular 4 - 在下拉列表中 Select 默认值 [Reactive Forms]

在 Angular 组件模板中添加脚本标签