考虑以下StackBlitz:
我们可以看到有两个按钮可以显示或隐藏警报。问题在于,通过关闭符号(X)关闭警报时,即使您按了错误按钮,警报也不会再次显示。为了再次显示警报,我必须按下按钮true,然后按下按钮false,以便再次显示此警报。为什么会这样呢?我想要一个解释。谢谢!
答案 0 :(得分:1)
内部组件的staticAlertClosed标志是输入,但是内部组件更改其值,因此
false
,在内部组件中为false
。false
,在内部组件中为true
。false
按钮会将外部标志的值设置为false。但是该值已经为假。因此值不会改变,因此Angular不会将值传递给内部组件的输入:它没有改变。这就说明了问题。标志的值在外部组件中为false
,在内部组件中为true
。true
,在内部组件中为true
。false
,在内部组件中为false
。该警报正在重新显示。简而言之:不要修改来自接收该输入的组件的输入值。仅父组件应修改输入值。要解决此问题,您可以使用双向绑定。 这是a demo。
答案 1 :(得分:1)
我发现了一个问题。在AlertComponent 中单击退出标志时,您只会触发staticAlertClosed变量的更改,但不会在AppComponent中更改变量的值。
有几种方法可以修复它,但这是我所做的。
Stackblitz链接-https://stackblitz.com/edit/angular-to9vlk-nyog3i?embed=1&file=app/app.component.html
我已经将输出事件与AppComponent中的变量挂钩。请参阅源代码以获取更多信息