【问题标题】:callback function inside of controller finishing after ng-optionsng-options 完成后控制器内部的回调函数
【发布时间】:2015-01-26 07:43:09
【问题描述】:
我使用 d3 和回调函数解析我的数据,并使用选择标签和 ng-options 创建下拉列表。问题是回调函数在页面加载之前没有完成。
那么,如何解决在控制器内部使用回调函数的问题?
为了更清楚地说明,如果我在回调函数之外有一个数据集,那么它可以完美地填充我的 ng-options。
【问题讨论】:
标签:
javascript
jquery
angularjs
asynchronous
d3.js
【解决方案2】:
您需要提供一个代码示例才能获得一个很有可能是正确的具体答案。如果我们不能确切地看到您在做什么,那么我们将无法告诉您问题所在。
也就是说,我怀疑您正在使用 d3.csv 或 d3.json(或类似的东西)来加载外部文件。这些函数使用异步回调,而不是同步回调,这可能不会导致此类问题。我假设您的回调正在填充范围上的 ng-option 模型。问题是它在 Angular 上下文之外执行,因此不会触发更新周期。
解决方案是在 scope.$apply() 调用中调用回调逻辑(正确方式),或者在回调结束时调用 scope.$digest()。例如做
d3.csv(url).get(function(error, rows) {
scope.$apply(function(scope) {
// Your logic that updates the scope here.
});
}
这应该会导致您的 ng-options 正确更新。如果这不起作用,请提供一个使用 Plukr 或 JSFiddle 之类的工作示例。