ng-options之后控制器内部的回调函数

时间:2015-01-26 07:43:10

标签: javascript jquery angularjs asynchronous d3.js

我使用d3和回调函数解析数据,并使用选择标记和ng-options创建下拉列表。问题是在页面加载之前回调函数没有完成。

因此,如何解决在控制器中使用回调函数的问题?

为了进一步说明,如果我在回调函数之外有一个数据集,那么这将完美地填充我的ng-options。

2 个答案:

答案 0 :(得分:1)

您是如何首先路由到该页面的?您可能希望查看UI-Router - 特别是它能够执行回调函数resolve promises并将这些分辨率注入到范围内,直到加载视图为止。

答案 1 :(得分:0)

您需要提供一个代码示例,以便获得一个很有可能正确的特定答案。如果我们无法确切了解您正在做什么,那么我们就无法告诉您问题所在。

那就是说,我怀疑你是否正在使用d3.csv或d3.json(或类似的东西)来加载外部文件。这些函数使用异步回调,而不是同步回调,这可能不会导致这类问题。我假设你的回调是填充范围上ng-option的模型。问题是它在Angular上下文之外执行,因此它不会触发更新周期。

解决方案是在范围内调用回调逻辑。$ apply()调用(正确方式),或调用范围。$ digest()在回调结束时。例如做

d3.csv(url).get(function(error, rows) {
  scope.$apply(function(scope) {
    // Your logic that updates the scope here.
  });
}

这应该会导致您的ng选项得到正确更新。如果这不起作用,请使用Plukr或JSFiddle等提供一个工作示例。