如果没有手动刷新,AngularDart不会通过查询参数检测状态变化。有没有一种方法可以强制组件重新加载?

时间:2018-08-27 22:32:33

标签: angular-dart

我正在从查询参数中提取一些字段,并使用这些字段进行API调用。从服务器接收到数据后,应该显示它,但是什么也没发生(打印语句确认已接收到数据)。

在没有相关查询参数的情况下,我已经在OnInit中使用了此模式,并且可以正常工作,但是这次我一定会想念更多的东西,因为我尝试使用具有硬编码url参数的OnInit而不是OnActivate并获取了同样的结果,除非手动刷新页面,否则组件永远不会使用新数据进行更新。一旦设置了推荐对象,是否有一种方法可以强制组件刷新自身?

class SolutionsComponent implements OnInit, OnActivate {
  static final url_path = "http://localhost/api/solutions/";
  SolutionsComponent();

  Recommendations recommendations = null;

  @override
  void ngOnInit() {
  //Google Analytics stuff in here
  }

  Future<Recommendations> loadRecommendations(url) {
    setRecommendationsFromJson(String response) {
      return Recommendations.fromJson(json.decode(response));
    }

    return HttpRequest.getString(url).then(setRecommendationsFromJson);
  }

  @override
  void onActivate(RouterState previous, RouterState current) {
    var id = getId(current.queryParameters);
    var recommendation = getSolution(current.queryParameters);
    var url = "${url_path}${recommendation}_${id}";
    loadRecommendations(url).then((data) {
      print("${data}");
      recommendations = data;
     print("${recommendations}");
    });
  }
}

1 个答案:

答案 0 :(得分:0)

致电ChangeDetectorRef.markForCheck

class SolutionsComponent implements OnInit, OnActivate {
  final ChangeDetectorRef _cdRef:
  SolutionsComponent(this._cdRef);

  void setRecommendationsFromJson(...) {
    ...
    _cdRef.markForCheck();
  }
}