Angular $ http返回数据,但不适用于范围

约翰尼·布朗森(Johnny Bronson)

角度来说,我有这个工厂

.factory('Users', function($http) {
  var users = [];

  return {
    getUsers: function() {
      return $http.get("data.json")
        .then(function(response) {
          users = response.data;
          return users;        
        });
    },
    getUser: function(id) {
      for (i = 0; i < users.length; i++) {
        if (users[i].id == id) {
          return users[i];
        }
      }
      return null;
    }
  }
})

然后将数据加载到我的控制器中

.controller('SessionsCtrl', function($scope, Users) {
  $scope.users = Users.getUsers();
})

如果我console.log来自http请求的响应,则表示我正在获取数据,但是由于某种原因,范围数据将不会更新。

我看过控制器看起来像这样的例子

Users.getUsers().then(function(data) {
    $scope.users = data;
});

但是据我了解,我$http已经不需要兑现承诺了。我想念什么吗?我是否需要参与$q

穆罕默德·塞帕凡(Mohammad Sepahvand)

这将起作用:

 getUsers: function() {
      return $http.get("data.json");
    },

和:

Users.getUsers().then(function(data) {
    $scope.users = data.data;
});

但是,您编写的内容将无法正常工作,原因仅在于您无法直接从稍后完成的操作(例如$http调用)中返回结果这个问题:

 getUsers: function() {
      return $http.get("data.json")
        .then(function(response) {
          users = response.data;
          return users;        
        });
    },

是到该return users;行执行ajax调用时仍在进行中,什么都还没有返回,所以用户将一无所获。对于您要执行的操作,我将使用回调:

 getUsers: function(callback) {
        $http.get("data.json")
         .then(function(response) {
          users = response.data;
          callback(users);        
        });
    },

用法:

Users.getUsers(function(data) {
    $scope.users = data;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

文件上传适用于邮递员,但不适用于angular2

适用于Angular 1.2,但不适用于1.3

Angular Test 仅适用于模拟服务类,但不适用于值

Angular指令适用于内联样式,但不适用于类

C#asp.net核心HTTP POST请求适用于邮递员,但不适用于我的Angular客户端(404错误)

HTTP PUT标头不适用于Angular 2

angular 5 behaviorsubject 不适用于 http

Angular 6 http不适用于单个JSON项目

PrimeNg 数据表不适用于 Angular 5

Angular $ watch不适用于数组和数据收集

Angular数据绑定不适用于async / await,但适用于promises

CORS Cookie可用于获取请求,但不适用于Angular2中的发布

Angular 5 应用程序适用于生产构建,但不适用于开发构建

Angular 指令 ng-model 适用于数组但不适用于字符串

Node.js API-适用于Postman,但不适用于Angular.js

AWS Cognito身份验证适用于Postman,但不适用于Angular Web应用程序

Django中的Jsonresponse可在浏览器中工作,但不适用于PostMan或Angular

Angular PatchValue不适用于FormArray

Angular指令不适用于表

ngAnimate不适用于Angular 1.2.16

Angular ngIf 不适用于模板

插值不适用于Angular

Angular代码不适用于Express

Angular withCredentials 不适用于 GET

angular js,asp.net mvc:$ http仅适用于ApiController而不适用于普通Controller吗?

Angular Universal不适用于Angular Google Maps

'this'关键字不适用于Angular Controller中的$ http'success'方法

Angular 4 JWT Http拦截器不适用于链请求

Angular 6- 分页不适用于数据表