在基础数据模型更改时防止组件更新

时间:2018-12-20 12:39:25

标签: angular angular2-changedetection

我正在构建一个在Angular 6中具有条件可见性规则的调查表。我无法控制所提供的数据结构,也无法控制要在当前正在开发的当前解决方案中实现的业务逻辑: /

因此,我遇到的问题是:

  • 我有一个“可见”调查问卷的概念,它是一个由多个部分组成的数组,每个部分都包含一系列问题
  • 回答问题后,我将重新运行可见性规则并创建一个与临时问题数组具有相同基本结构的“临时”数组。
  • 然后我使用lodash合并这些数组,从而使以前隐藏的组件现在神奇地出现在问卷中。
  • 除了一件令我非常沮丧的事情,这一切都很好,基本上以前回答的问题又恢复为未回答的状态(Angular正在重新绘制它们)
  • 这里令人沮丧的是,尽管基础数组发生了变化,但元素绑定到的原始对象没有改变。在Vue中(使用VDOM),以前渲染的元素不会更改,这是我期望的。但是在Angular中,它们确实如此,我猜这是由于Angular的变更检测策略所致。

我已经阅读了一些有关Angular Change Detection的文章,但是我还是没有得到它,还是不支持我的用例?用户仍然可以与该组件进行交互很重要,但是如果HTML用于呈现的基础对象没有改变(不会改变),那么我就不希望它重新呈现。

我一直关注的主要内容是ChangeDetectorRef,并使用detach()detectChanges()reattach()方法,并关注此博客文章https://blog.angularindepth.com/everything-you-need-to-know-about-change-detection-in-angular-8006c51d206f < / p>

在父组件中,我设置了changeDetection: ChangeDetectionStrategy.OnPush

我没有尝试过任何方法。要么该组件都无法初始化(如果我使用 constructor(public cd: ChangeDetectorRef) { this.cd.detach(); }

或者我可以渲染它,但是不能与组件交互。或者,我可以让它进行交互,但是当基础数组更新时,它会再次重置。

我对接下来的去路有点茫然。我宁愿只是把东西扔掉,然后在Angular上使用Vue,但是可惜,西斯勋爵不允许我这样做。

1 个答案:

答案 0 :(得分:0)

如我所见,您可以通过设置一个额外的属性来检查是否按下了“还原”按钮并将其用作设置值的标志来克服此问题。   -回答:是

如果按下了“还原”按钮,您可以在HTML中将已应答的variabel的状态更改为false吗?

此外,这还只是一个想法,有很多方法可以解决此问题,但是由于您确实没有提供任何代码,因此很难为您的问题提供更具体的解决方案。