【问题标题】:AngularJS: Issue with $http request - DOM not updated for jQuery function callAngularJS:$http 请求问题 - DOM 未针对 jQuery 函数调用更新
【发布时间】:2015-12-07 08:44:39
【问题描述】:

我遇到了一个问题,即调用 $http 请求没有为 jQuery 函数调用更新 DOM。

请查看Plunker

在我的代码 script.js 中,出于测试目的,我将 $scope.components 用作全局和函数。 但是当我将 json 值硬编码到全局变量时,一切正常。当我得到 json 作为 $http 响应时,树结构的展开和折叠功能停止工作。

下面是我的 $http 请求代码

$scope.init = function init() {
$http.get('treeData.json').success(function(data) {
  $scope.components = data;
}).error(function(data) {

});

};

请让我知道我在这里做错了什么。

【问题讨论】:

  • 创建一个指令并将您的 jquery 代码放入指令中。
  • @ArnaudGueras 创建指令没有解决问题。但是,我标记的答案对我有用。 vpsingh016提供的解决方案有什么缺点吗?

标签: javascript angularjs json


【解决方案1】:

这是因为您的 jQuery 代码在从 treedata.json 获取数据之前被执行。 $http 将创建一个 Promise,因此在 Promise 得到解决后移动您的 jQuery 逻辑。 我已经更新了 plunker。

[http://plnkr.co/edit/XuxO29FZUoXf84nVvjrg?p=preview][1]

【讨论】:

  • 加载页面时有一点延迟。
  • 这不是延迟,是异步调用,这就是它返回承诺的原因。
【解决方案2】:

您应该首先定义组件,如下所示: $scope.components = [];

【讨论】:

  • 试过了...没有运气:(
【解决方案3】:

看起来从服务器返回的数据不是 JSON 格式。默认情况下 $http.get 接受 JSON 返回类型。因此,您的成功功能没有得到执行。

更新 您可以检查angular documentation 是否使用 $http。推荐的方式是使用get,如下图所示。

$http.get('/someUrl', config).then(successCallback, errorCallback);

【讨论】:

  • 我已经在jsonlint 中验证了我的 JSON。此外,当我将 JSON 设置为全局变量时,它工作正常。
  • 你能试试 '$http.get('/someUrl', config).then(successCallback, errorCallback)' 来调用你的 api 并查看它是否有效...同时保持警觉或其他内容错误函数...这有助于识别正确的错误
【解决方案4】:

试试 $scope.$apply( $scope.components = 数据 );

【讨论】:

猜你喜欢
  • 2010-11-07
  • 2017-04-22
  • 2012-08-14
  • 2018-02-20
  • 1970-01-01
  • 2016-12-28
  • 2019-10-08
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多