【问题标题】:Using ngResource in an AngularJS SPA在 AngularJS SPA 中使用 ngResource
【发布时间】:2016-02-11 21:44:36
【问题描述】:

我在工厂中使用 ngResource 从 REST API URL 获取数据,然后对检索到的数据进行一些基本处理。这工作正常(使用console.log() 验证)。我在我的根模块和主控制器中正确注入了依赖项,并设置了一个 $scope 变量等于这个检索到的数据。

在 HTML 中,我将 {{variableName}} 放在所需的标签内。 但是,它不会被填充。

我错过了什么?我是否需要添加 $watch 或其他内容才能使其正常工作?

PS-

var dataResource = $resource("http://<URL>"); $scope.trialData = dataResource.get();

当我将它直接添加到控制器时,这个 trialData 填充来自同一 URL 的值就好了。

【问题讨论】:

  • 如果没有看到完整的 html 模板和控制器示例,很难说出确切的问题。最初$scope.trialData 将是一个空对象,但当get() 完成时,它将被填充。您说您使用controllerName.variableName,但您的代码以$scope 访问范围,因此您将没有控制器名称。
  • @Duncan 抱歉,这是我试图简化问题时的疏忽。已更正。

标签: javascript html angularjs rest ngresource


【解决方案1】:

资源使用异步请求。您必须等待他们的承诺像这样解决:

dataResource.get().$promise.then(function(object){
   $scope.trialData = object;// or maybe object.data
});

【讨论】:

  • 我必须在工厂内执行此操作吗?目前,我正在使用工厂返回值,但将其分配给控制器内的 $scope 变量。
  • 不,这不是 promise 的工作方式。如果您确实在工厂返回 dataResource.get()。然后你应该在你的控制器中使用 $promise 字段。您应该查看docs.angularjs.org/#!/api/ng/service/$q 以了解 Promise 的工作原理。
  • 还有一点,如果你使用controllerAs语法,用this代替$scope。
猜你喜欢
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2018-12-27
相关资源
最近更新 更多