如何在没有控制器余烬的情况下重新渲染另一个组件内的子组件

Posted

技术标签:

【中文标题】如何在没有控制器余烬的情况下重新渲染另一个组件内的子组件【英文标题】:how to rerender a child component inside another component without controller ember 【发布时间】:2017-07-02 08:14:36 【问题描述】:

我有一个父组件名称-card-mode

**card-mode.js**
import Ember from 'ember';

export default Ember.Component.extend(
    card: null,
    previousPage: null,
    nextPage: null,
    init()
        this._super(...arguments);

        if(this.get('errand').selectedMeasure != null)
            this.setCard("page/card/measure-master-summary");
        
    ,
    setCard(card)
        this.set('card', card);
    ,
    actions: 
        setCard(name)
          this.setCard(name);
        ,
        next(name)
            console.log(name);
            this.setCard(name);
        ,
        previous(name)
            console.log(name);
            this.setCard(name);

        ,
    
);

**card-mode.hbs**
<div>
component card setCard=(action 'setCard') 
</div>
<div>
<a href="#" class="btn btn-primary padding-lr" onclick=action "previous" previousPage>previous<i class="fa fa-arrow-circle-right"></i></a> 
<a href="#" class="btn btn-primary padding-lr npc" onclick=action "next" nextPage>Next <i class="fa fa-arrow-circle-right"></i></a> 
</div>

在这个卡片模式组件中,我将通过调用 setcard 方法来渲染一个组件。

直到它工作正常。

但是现在,我必须在父组件中多次渲染同一个子组件。

认为 child-page-1、child-page-2 是应该在父组件中渲染的两个子组件。 child-page-1 和 child-page-2 在我使用上一个和下一个操作调用它们时完美呈现。

但是当我再次尝试调用 child-page-2 时,不会再次调用 child-page-2 初始化函数。

child-page-2.js

export default Ember.Component.extend(

    errand: Ember.inject.service(),
    selectedDimensionAnalysis: null,
    analysisTable:null,

    init()
        this._super(...arguments);
        this.parentView.set('nextPage','child-page-1');
        this.parentView.set('previousPage','child-page-2');

        // results that will be displayed - 
        //results will be varied everytime based on the number of times it is called
    ,
);

我的问题:

我应该如何再次重新渲染子组件。我没有使用任何控制器和模型,因为我不需要它们。

【问题讨论】:

【参考方案1】:

您错误地假设没有控制器。如果你没有为你定义一个 Ember generates 一个。

如果您安装 Ember Inspector,您可以查看存在哪些控制器 https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi?hl=en

建议:

如果将组件添加到把手HBS 文件中,则可以多次呈现组件。实例化一个新组件并传入您希望它从父组件使用的属性。

示例HBS

child-page
        currentPage=3
        property1='something'
        property2='something'

【讨论】:

以上是关于如何在没有控制器余烬的情况下重新渲染另一个组件内的子组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新整个页面的情况下重新加载组件?

我的 Redux 状态发生了变化,为啥 React 没有触发重新渲染?

如何从另一个组件重新渲染特定组件模板?角 2

如何从 Blazor 中的另一个组件重新渲染一个组件?

Vue 组件 prop 更改不会触发重新渲染

React 功能组件中状态更改后组件未重新渲染