gpt4 book ai didi

angular - Angular 手动更改检测到分离的组件

转载 作者:行者123 更新时间:2023-12-03 03:01:50 25 4
gpt4 key购买 nike

使用Angular Dart 5.2,我试图探索如何从变更检测中分离组件并进行手动检查,但未能成功。这是一个最小的示例:

app_component.dart

import 'package:angular/angular.dart';
import 'package:angular_change_detection/detached.dart';

@Component(
selector: 'my-app',
template: '''
<h1>Angular change detection tests</h1>
<detached></detached>
''',
directives: [DetachedComponent],
)
class AppComponent {}

detached.dart
import 'dart:async';
import 'dart:math' show Random;

import 'package:angular/angular.dart';

@Component(
selector: 'detached',
template: '''
<span *ngFor="let i of internal">{{i}}, </span>
''',
directives: [coreDirectives],
changeDetection: ChangeDetectionStrategy.Detached
)
class DetachedComponent implements OnInit {
final Random random = Random();
final ChangeDetectorRef changeDetectorRef;

List<int> internal = [];

DetachedComponent(this.changeDetectorRef);

@override
void ngOnInit() {
Timer.periodic(Duration(seconds: 1), (_) {
internal = List.generate(random.nextInt(10) + 1, (i) => (DateTime.now().millisecondsSinceEpoch * (i + 1)) % 1337);
print("Internal list changed: $internal}");
});

Timer.periodic(Duration(seconds: 3), (_) {
changeDetectorRef.detectChanges();
print("detecting changes; internal list reference: ${internal.hashCode}");
});

}
}

我的期望是,分离的组件的 View 将每3秒用新的 internal值更新一次。控制台日志反射(reflect) internal列表是每秒用新值创建的,我每3秒运行 detectChanges(),但屏幕上没有任何变化。

我也尝试过的事情:
  • 手动从构造函数的变更检测中分离组件-
  • 没有改变
    使用 OnPush策略和 markforCheck()而不是 detectChanges()
  • -按预期方式工作

  • 所以问题是:如何从变更检测中分离组件,并在某些事件上手动触发它?

    最佳答案

    您需要先附加附件,然后才能运行更改检测

  • 重新连接
  • markForCheck()
  • 分离
  • 关于angular - Angular 手动更改检测到分离的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53973139/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com