我正在研究angular 8应用程序。在该应用程序中,我想在另一个组件内部的按钮单击时重新加载组件。我找到了一种使用路由器执行此操作的方法,首先导航至示例组件,然后按如下方式导航至实际组件如下面的代码所示。
this.router.navigateByUrl('/SampleComponent', { skipLocationChange: true });
this.router.navigate(["yourLandingComponent"]);
但是在此应用程序中,我没有使用路由器。这是简单的单页应用程序。我使用了ngIf
来渲染组件,如下所示。
<div class="row main-wrapper">
<app-section-rental class="container-fluid p-0" *ngIf="tabset.tab0"></app-section-rental>
<app-section-insuarance class="container-fluid p-0" *ngIf="tabset.tab1"></app-section-insuarance>
<app-section-additionals class="container-fluid p-0" *ngIf="tabset.tab2"></app-section-additionals>
<app-section-optionals class="container-fluid p-0" *ngIf="tabset.tab3"></app-section-optionals>
<app-price-breakdown class="container-fluid p-0" *ngIf="tabset.tab4"></app-price-breakdown>
</div>
所以我想知道如何通过单击按钮重新加载组件,该按钮位于另一个组件内部。
我还发现了使用角度订阅的另一种方法。但是问题是我订阅得到了一个元素,我不必更改任何会改变HTML的状态。所以我不知道我的组件是否被重新加载。为了重新加载组件,是否必须对DOM元素进行任何更改?
答案 0 :(得分:1)
您可以使用getTimeElapsed
中的Obersavables。
此Observable包含组件中显示/更新的数据。
std::string getTimeElapsed(std::chrono::nanoseconds elapsed, size_t maxUnits = 2)
{
using namespace std::chrono_literals;
std::ostringstream formatted("");
int usedUnits{};
auto hours = std::chrono::duration_cast<std::chrono::hours>(elapsed);
if (hours != 0h)
{
formatted << hours << " ";
++usedUnits;
}
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(elapsed % 1h);
if (minutes != 0min)
{
formatted << minutes << " ";
++usedUnits;
}
auto seconds = std::chrono::duration_cast<std::chrono::seconds>(elapsed % 1min);
if (seconds != 0min && usedUnits != maxUnits)
{
formatted << seconds << " ";
++usedUnits;
}
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(elapsed % 1s);
if (milliseconds != 0ms && usedUnits != maxUnits)
{
formatted << milliseconds << " ";
++usedUnits;
}
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>(elapsed % 1ms);
if (microseconds != 0us && usedUnits != maxUnits)
{
formatted << microseconds << " ";
++usedUnits;
}
auto nanoseconds = std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed % 1us);
if (nanoseconds != 0us && usedUnits != maxUnits)
{
formatted << nanoseconds << " ";
++usedUnits;
}
return formatted.str();
}
以下功能将更新您的数据:
rxjs
在刷新按钮的private _testSubject = new BehaviorSubject<string>('old data');
testObservable$: Observable<string> = this._testSubject.asObservable();
上调用此函数。
最后,您可以像这样在组件html中使用Observable:
public refresh(){
this._testSubject.next('new Data');
}
希望有帮助!
编辑:
我在您的评论中注意到,您的刷新按钮位于父组件中。在这种情况下,您可以在父组件中实现可观察对象,并在组件中使用输入:
onClick
并在您的父组件中:
<div>
{{(testObservable$|async)}}
</div>