单击按钮重新加载角度分量

我正在研究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元素进行任何更改?

jzh5939 回答:单击按钮重新加载角度分量

您可以使用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>
本文链接:https://www.f2er.com/3081283.html

大家都在问