Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度计时器替代方案还是最佳方法_Angular_Typescript - Fatal编程技术网

Angular 角度计时器替代方案还是最佳方法

Angular 角度计时器替代方案还是最佳方法,angular,typescript,Angular,Typescript,我目前正在为一个项目使用Angular 8,我有一个带有复选框的组件,它将决定页脚是否可见 因为页脚是设置组件的一个独立组件,所以我当前需要将页脚放在setTimeout上,每5秒检查一次局部变量 setTimeout(function(){ checklocalStorage() }, 5000); 当它只有一个计时器是可以的,但当我添加更多的计时器时,这似乎是一个不干净的方法 有没有其他方法可以做到这一点,让组件自己更新,而不必让计时器一直循环以检查localstorage变量中是否有任何

我目前正在为一个项目使用Angular 8,我有一个带有复选框的组件,它将决定页脚是否可见

因为页脚是设置组件的一个独立组件,所以我当前需要将页脚放在setTimeout上,每5秒检查一次局部变量

setTimeout(function(){ checklocalStorage() }, 5000);
当它只有一个计时器是可以的,但当我添加更多的计时器时,这似乎是一个不干净的方法


有没有其他方法可以做到这一点,让组件自己更新,而不必让计时器一直循环以检查localstorage变量中是否有任何更改,或者这是推荐的方法?

组件通信是Angular的核心部分,如何进行通信主要取决于您和/或您的团队。在这种情况下,setTimeout是不合适的;这不仅是因为它只会在重复的时间间隔调用一次setInterval,而且还因为它效率不高

这意味着,如果选中复选框,您仍有可能等待近5秒,以获得关于您在暴露或关闭页脚的结果中所做操作的反馈

相反,考虑组件可以在它们之间绑定数据的四种主要方式:

服务:

您可以构造一个处理组件之间通信的服务。服务是可注入的,这意味着您可以将它们注入多个组件,并且可以在应用程序的根级别加载它们

只需创建一个服务并将其提供到您需要的模块中

然后-在您的服务中创建一个可观察的,并在需要访问您的信息的组件中订阅该可观察的

阅读更多有关可观测数据的信息,请访问:

在上面的链接中,还有一个称为延迟序列的示例,它可能适合您的目的

NgRx:

使用Redux NgRx被视为实现组件间通信的高级方法,但它是管理数据和数据检索的一个不变且可靠的来源

对于您的场景,如果您不使用它,请不要单独在此解决方案上实现它-但是为了实现它,您只需在显示或隐藏页脚时发送一个操作,然后您就可以在其他位置的存储中订阅该数据

请在此处阅读有关该商店的更多信息:

@输入和输出:

如果组件是嵌套的,则可以使用输入和输出处理它们之间的数据。比如说,你有一个页面组件。理论上,你的页脚应该在里面,你的复选框应该在里面。 因此,您的复选框可以将一个值数据绑定到页面组件。然后可以将其绑定到页脚组件

然而,这可能会变得混乱,只有在您确定数据没有在其他地方被操纵时才应该使用

阅读更多有关输入和输出以及通用组件通信的信息,请访问:

事件总线:

从技术上讲,您可以使用事件总线向您的应用程序发送一个通知,告诉它立即显示此页脚,尽管这可能不是最好的方法

事件总线的使用通常更多地用于通知目的,或者当您不需要知道哪个组件调用了操作时

本质上,事件总线只是用来监听事件或环境,而不是追踪事件发生的地点或方式


阅读更多关于Angular中事件Emmiter的信息,这里:

为什么不使用rxjs interval?如何更改局部变量?它只是改变了角度应用程序,而不是导航器中的其他选项卡,方法是使用服务,因此当变量改变时,存储在本地variabel中并发出值。您只订阅可观察的主题无论如何,您不应该使用这种方法,尝试创建一个主题服务,该主题将在每次本地存储有新值时发出事件,或者您可以使用一个将本地存储与RXJS集成的库,我相信Npm中有一个