【问题标题】: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


【解决方案1】:

首先您是如何路由到该页面的?您可能想查看UI-Router——特别是它执行回调函数的能力,resolve promises 并将这些分辨率注入到作用域中,甚至在加载视图之前。

【讨论】:

    【解决方案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 之类的工作示例。

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 2014-10-27
      • 2014-07-06
      • 1970-01-01
      • 2023-02-04
      • 2018-06-20
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多