angular - 打开和关闭 ng-bootstrap 警报组件 (ngb-alert)
问题描述
考虑以下 StackBlitz:
如我们所见,我们有两个按钮可以显示或隐藏警报。问题是当通过关闭符号(X)关闭警报时,即使您按下错误按钮,警报也不会再次显示。要再次显示警报,我必须按下按钮 true 然后按下按钮 false 以便再次显示此警报。为什么会这样?我想要一个解释。谢谢!
解决方案
内部组件的 staticAlertClosed 标志是一个输入,但是内部组件改变了它的值,所以
- 通过按下 false 按钮将外部值设置为 false 将 false 值作为输入传递给内部组件,并且正在显示警报。标志的值
false
在外部组件和false
内部组件中。 - 使用其关闭按钮关闭警报会将内部组件标志设置为 true,从而使警报消失。标志的值
false
在外部组件和true
内部组件中。 - 单击
false
外部组件中的按钮会将外部标志的值设置为 false。但是这个值已经是假的了。所以值不会改变,因此 Angular 不会将值传递给内部组件的输入:它没有改变。这就解释了问题。标志的值false
在外部组件和true
内部组件中。 - 单击 true 按钮会使外部组件中的标志值发生变化。所以它再次传递给内部组件。标志的值
true
在外部组件和true
内部组件中。 - 单击 false 按钮会使外部组件中的标志值发生变化。所以它再次传递给内部组件。标志的值
false
在外部组件和false
内部组件中。正在重新显示警报。
简而言之:不要修改来自接收该输入的组件的输入值。只有父组件应该修改输入值。要解决此问题,您可以使用双向绑定。这是一个演示。
推荐阅读
- mysql - MySQL 从 5.1.11 升级到 5.1.72
- here-api - 具有产品风格的 Android SDK 身份验证
- jira - 错误:启用 JIRA 扩展后索引超出范围(问题跟踪器)
- c# - 当 PC/MAC 上的应用程序窗口大小发生变化时,如何获得通知?
- groovy - 如何在项目的soap ui中使用groovy创建摘要报告
- javascript - 如何更新高阶组件
- angular6 - angular-cli“ng build --prod”的问题
- ionic-framework - 如果专注于 Ionic 3,iframe 会再次重新加载
- java - 为什么我们需要参数化的构造函数
- sql - 如何删除多个列 IN\NOT IN 其他表?