AngularJS 进阶 (四十二)ng-options 渲染的第一项为空问题分析及解决方案

一、问题描述
在使用ng-options
时,如果首次使用,可能会在渲染完成后发现下拉列表的第一项为空,并且在选择一项之后,为空的第一项已经消失了,这样用户体验上来说很不好。
二、原因剖析
使用ng-options
的时候,是配合模型指令ng-model
一起使用的,从而我们就可以知道,渲染生成的第一项为空原因肯定和ng-model
的初始值有关系。
三、解决办法
可以在控制器中给
ng-model
的初始值设置为下拉选项中的某个值或对象;可以给
select
默认增加一项类似“请选择”的选项。
四、示例
控制器
复制代码
复制代码
效果


五、拓展阅读 AngularJS 上拉加载问题解决方法
项目中始终存在一个问题:当在搜索栏输入关键词后(见图 1),按照既定的业务逻辑应该是服务端接收到请求后,首先返回查询的前 7 条数据,待客户端出现上拉加载时,继续查找另外 7 条数据。但实际情形是不确定的,在服务端控制台(见图 2)可看到 begno 一直到了 126,也就是相当于客户端往服务端请求了 127 次,这是一个令人无法忍受的结果。

图 1 客户端搜索栏

图 2 服务端控制台
可以断定是客户端的业务逻辑出现了问题。返回到客户端,查看源码逻辑,修改如下:
控制器
复制代码
视图
复制代码
经过以上修改,可以实现避免不必要的请求。

六、参考文献

版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/24ed670eb929888ede6ae843c】。文章转载请联系作者。
评论