【问题标题】:AngularJS Data Binding not updating content dynamicallyAngularJS数据绑定不动态更新内容
【发布时间】:2016-03-03 20:05:57
【问题描述】:

我正在尝试从 Google 图书 API - https://www.googleapis.com/books/v1/volumes 检索数据

这是 plnkr 链接-https://plnkr.co/edit/K4f7CVIeurAUMRzQYMb0?p=preview

我在搜索文本中输入 ISBN 编号(例如:1234),并使用我从 google 收到的响应项更新 bookList。

我正在尝试使用ng-repeat 遍历这些书籍,但它没有更新。 我需要点击搜索两次才能看到ng-repeat中的结果。

我很困惑为什么不动态更新内容。

查看 plnkr 链接。 https://plnkr.co/edit/K4f7CVIeurAUMRzQYMb0?p=preview

在搜索文本中输入 1234 并点击搜索,不会在 html 中更新。

再次点击搜索,它会使用最后一个响应更新 html。

谢谢。

【问题讨论】:

  • 你不应该使用$.ajax(),而是使用$http,基本上你的方法是错误的。
  • 另外,ng-repeat 应该在 li 元素上,而不是 ul
  • 好的,是的,我会这样做的。但是任何想法,为什么它不更新。
  • 你像这样使用 $http:$http.get(url).then(function(response) { first.books = response.data; }, function(error){console.log(error)}。这样,在评估范围时,在解决 http 承诺后,您的转发器将使用结果进行更新。那么你的 li 应该是<li ng-repeat="book in first.books">
  • 嗨,它成功了。但我还是没明白这里不使用 $.ajax 方法的意义。

标签: javascript angularjs


【解决方案1】:

您正在使用 jQuery 在 angular $digest 之外进行调用。您应该改用$http 服务。

$http({
  url: "https://www.googleapis.com/books/v1/volumes",
  method: 'GET',
  params: {q:first.inputISBN}
});

https://plnkr.co/edit/VkeBZL8ZF6gfYQ9iQoFv

【讨论】:

  • 您好,感谢您的回答。您能否详细说明您对 Angular $digest 的陈述。或提供任何链接以阅读相关内容。
  • Angular 需要处于 $digest 阶段才能看到某些东西(在这种情况下是书籍数组)发生了变化。许多事情都会触发 $digest 循环,例如 $http 响应、ngClick、$timeout 等。您也可以使用 $scope 方法手动触发它:$apply、$eval、$evalAsync。然后,只有这样 Angular 才开始进行脏检查并对更改做出反应。
  • 谢谢,现在说得通了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2016-10-31
  • 1970-01-01
相关资源
最近更新 更多