在 ng 选项之后完成控制器内部的回调函数

callback function inside of controller finishing after ng-options

本文关键字:内部 回调 函数 控制器 ng 选项 之后      更新时间:2023-09-26

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

那么,如何解决在控制器内部使用回调函数的问题呢?

为了进一步澄清,如果我在回调函数之外有一个数据集,它可以工作并完美地填充我的 ng 选项。

您首先如何路由到页面?你可能想看看UI-Router - 特别是它执行回调函数,解决承诺并将这些决议注入范围的能力,甚至在加载视图之前。

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

也就是说,我怀疑您正在使用 d3.csv 或 d3.json(或类似的东西)来加载外部文件。这些函数使用异步回调,而不是同步回调,后者可能不会引起此类问题。我假设您的回调正在作用域上填充您的 ng 选项模型。问题是它在 Angular 上下文之外执行,因此不会触发更新周期。

解决方案是在 scope.$apply() 调用(正确的方式)中调用回调逻辑,或者在回调结束时调用 scope.$digest()。

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

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