打开和关闭 ng-bootstrap 警报组件(ngb-alert)
Open and close ng-bootstrap alert component (ngb-alert)
考虑以下 StackBlitz:
正如我们所见,我们有两个按钮可以显示或隐藏警报。问题是,当通过符号关闭 (X) 关闭警报时,即使您按下 false 按钮,警报也不会再次显示。要再次显示警报,我必须按 true 按钮,然后按 false 按钮,以便再次显示该警报。为什么会这样?我想要一个解释。谢谢!
内部组件的staticAlertClosed标志是一个输入,但是内部组件改变了它的值所以
- 通过按下 false 按钮将外部值设置为 false,将 false 值作为输入传递给内部组件,并显示警报。标志的值在外部组件中为
false
,在内部组件中为 false
。
- 使用关闭按钮关闭警报会将内部组件标志设置为 true,使警报消失。标志的值在外部组件中为
false
,在内部组件中为 true
。
- 单击外部组件中的
false
按钮会将外部标志的值设置为 false。但是这个值已经是假的了。所以值没有改变,因此 Angular 不会将值传递给内部组件的输入:它没有改变。这说明了问题。标志的值在外部组件中为 false
,在内部组件中为 true
。
- 点击 true 按钮会使外部组件中的标志值发生变化。所以它再次传递给内部组件。标志的值在外部组件中为
true
,在内部组件中为 true
。
- 单击 false 按钮会使外部组件中的标志值发生变化。所以它再次传递给内部组件。标志的值在外部组件中为
false
,在内部组件中为 false
。正在重新显示警报。
简而言之:不要修改接收输入的组件的输入值。只有父组件应该修改输入值。要解决此问题,您可以使用双向绑定。
这里是 a demo.
我发现了一个问题。当您单击 AlertComponent 中的退出标志时,您只会触发 staticAlertClosed 变量的更改,但不会更改 AppComponent.
中变量的值
有多种方法可以修复它,但这是我所做的。
Stackblitz link - https://stackblitz.com/edit/angular-to9vlk-nyog3i?embed=1&file=app/app.component.html
我在 AppComponent 中用变量挂钩了输出事件。查看源代码了解更多信息
考虑以下 StackBlitz:
正如我们所见,我们有两个按钮可以显示或隐藏警报。问题是,当通过符号关闭 (X) 关闭警报时,即使您按下 false 按钮,警报也不会再次显示。要再次显示警报,我必须按 true 按钮,然后按 false 按钮,以便再次显示该警报。为什么会这样?我想要一个解释。谢谢!
内部组件的staticAlertClosed标志是一个输入,但是内部组件改变了它的值所以
- 通过按下 false 按钮将外部值设置为 false,将 false 值作为输入传递给内部组件,并显示警报。标志的值在外部组件中为
false
,在内部组件中为false
。 - 使用关闭按钮关闭警报会将内部组件标志设置为 true,使警报消失。标志的值在外部组件中为
false
,在内部组件中为true
。 - 单击外部组件中的
false
按钮会将外部标志的值设置为 false。但是这个值已经是假的了。所以值没有改变,因此 Angular 不会将值传递给内部组件的输入:它没有改变。这说明了问题。标志的值在外部组件中为false
,在内部组件中为true
。 - 点击 true 按钮会使外部组件中的标志值发生变化。所以它再次传递给内部组件。标志的值在外部组件中为
true
,在内部组件中为true
。 - 单击 false 按钮会使外部组件中的标志值发生变化。所以它再次传递给内部组件。标志的值在外部组件中为
false
,在内部组件中为false
。正在重新显示警报。
简而言之:不要修改接收输入的组件的输入值。只有父组件应该修改输入值。要解决此问题,您可以使用双向绑定。 这里是 a demo.
我发现了一个问题。当您单击 AlertComponent 中的退出标志时,您只会触发 staticAlertClosed 变量的更改,但不会更改 AppComponent.
中变量的值有多种方法可以修复它,但这是我所做的。
Stackblitz link - https://stackblitz.com/edit/angular-to9vlk-nyog3i?embed=1&file=app/app.component.html
我在 AppComponent 中用变量挂钩了输出事件。查看源代码了解更多信息