我有一个指令,它封装了一个select下拉列表,它从异步Web请求中获取数据。在Web请求完成后,我更新选择的ng-model绑定的变量,并通过范围更新范围。$ apply()。由于Web请求的异步性质,此更新包含在setTimeout中,但在我提供的jsFiddle中,我已经通过setTimeout稍有延迟来模拟此调用。
问题如下:虽然一切都按预期工作,但是如果你检查了select元素,那么选项的选择都有'selected'属性,我依赖它来进行单元测试。如果我摆脱了setTimeout,只需用
更新模型 scope.currentModel = scope.datalist[_.findIndex(scope.datalist, {
'code': scope.ngModel
})];
scope.$apply();
然后正确的选项获得
选择= “选择了”
属性我可以用于我的单元测试。所以我的问题是,当我使用setTimeout时,为什么模型会更新并反映在浏览器中,但是所选的选项没有得到选定的属性?这似乎发生在Safari和Chrome for Mac中,而不是在Windows上进行测试。 jsFiddle here.