我在开发一个测试工具,用户可以手动从一个下拉菜单里,选择当前浏览器的 user agent 字段。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN4czN4ADMkNGNjlTMycTO0YTY0kjYhlDN5EWNiF2Mm9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
其中 My Browser 是当前浏览器真实的值,其他4个都是代码里硬编码的 fake user agent,如下图所示:
这个下拉菜单的实现:
注意这里的设计,下拉菜单有显示给终端用户查看的字符串和 value,其中 My Browser 对应的值为“”,而其余 fake browser 每个 entry 的 value,绑定到 fakeBrowsers 数组的每个元素。
那么在 Component 代码里,如何获取当前用户选中的条目对应的值呢?
利用上图给 select 控件绑定的 formControl.
切换下拉菜单后,首先触发 fakeBrowserSelection$ 注册的订阅函数:
根源是我们实例化的 FormControl value 发生了变化,在 setValue 方法里触发我们的 Observable:
然后是 valueChanges 这个 Observable 发出的值,触发的订阅函数: