AngularDart не обнаруживает изменения состояния с параметрами запроса без обновления вручную. Есть ли способ заставить компонент перезагрузиться? - PullRequest
0 голосов
/ 28 августа 2018

Я извлекаю некоторые поля из параметров запроса и использую их для вызова API. После получения данных с сервера они должны отображаться, однако ничего не происходит (оператор печати подтверждает, что данные получены).

Я использовал этот шаблон внутри OnInit, когда нет соответствующих параметров запроса, и он работает нормально, но на этот раз мне не хватает больше, чем я, поскольку я пытался использовать OnInit вместо OnActivate с жестко закодированными параметрами URL и получить тот же результат, компонент никогда не обновляется с новыми данными, пока не обновится страница вручную. Есть ли способ заставить компонент обновляться после установки объекта рекомендаций?

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 голосов
/ 28 августа 2018

Звоните ChangeDetectorRef.markForCheck

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

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