Javascript 无法使用AngularJS通过$http和promise检索数据

Javascript 无法使用AngularJS通过$http和promise检索数据,javascript,angularjs,promise,Javascript,Angularjs,Promise,我正在尝试在AngularJS应用程序中与RESTful API交互。执行此操作时,视图中不会显示任何数据 我一定是误解了如何使用$http+承诺。你知道怎么了吗 这是我的工厂: angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) { var Forms = {}; Forms.all = function() { var defer

我正在尝试在AngularJS应用程序中与RESTful API交互。执行此操作时,视图中不会显示任何数据

我一定是误解了如何使用$http+承诺。你知道怎么了吗

这是我的工厂:

angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
    var Forms = {};

    Forms.all = function() {
        var deferred = $q.defer();
        $http.get('/api/forms.json').then(function(response) {
            console.log(response.data);
            return response.data;
        });
        return deferred.promise;
    };

    return Forms;
}]);
和我的控制器:

angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
    'use strict';

    $scope.forms = Forms.all();
}]);
和我的模板:

<div ng-controller="formListController">
    <ul class="form-list">
        <li ng-repeat="form in forms">
            <a class="form" href="#/forms/{{form._id}}">
                <span class="title">{{form.title}}</span>
                <span ng-if="form.lastPublished">Last published {{form.lastPublished | date:'M/d/yy'}}</span>
            </a>
        </li>
    </ul>
</div>

据我所知,在通过AngularJS 1.2中的
$scope.forms=forms.all()

获取控制器中的数据时,我应该能够依赖承诺。他们删除了在视图模板中自动展开承诺的功能

您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式

Forms.all = function($scope, binding) {
        return $http.get('/api/forms.json').then(function(response) {
            console.log(response.data);

            $scope[binding] = response.data;

            return response.data;
        });
    };


Forms.all($scope, 'forms');

编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不需要重新编写函数将实际数据绑定到您的作用域。

在AngularJS 1.2中,他们删除了在视图模板中自动展开承诺的功能

您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式

Forms.all = function($scope, binding) {
        return $http.get('/api/forms.json').then(function(response) {
            console.log(response.data);

            $scope[binding] = response.data;

            return response.data;
        });
    };


Forms.all($scope, 'forms');

编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不需要重新编写函数将实际数据绑定到您的作用域。

在AngularJS 1.2中,他们删除了在视图模板中自动展开承诺的功能

您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式

Forms.all = function($scope, binding) {
        return $http.get('/api/forms.json').then(function(response) {
            console.log(response.data);

            $scope[binding] = response.data;

            return response.data;
        });
    };


Forms.all($scope, 'forms');

编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不需要重新编写函数将实际数据绑定到您的作用域。

在AngularJS 1.2中,他们删除了在视图模板中自动展开承诺的功能

您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式

Forms.all = function($scope, binding) {
        return $http.get('/api/forms.json').then(function(response) {
            console.log(response.data);

            $scope[binding] = response.data;

            return response.data;
        });
    };


Forms.all($scope, 'forms');

编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不是重新编写函数,将实际数据绑定到您的作用域。

我认为您应该简化您的源代码,如下所示

angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
    var Forms = {};

    Forms.all = function() {

      return  $http.get('/api/forms.json')

    };

    return Forms;
}]);

angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
    'use strict';

     Forms.all().then(function(data){$scope.forms=data;});
}]);

我认为您应该简化您的源代码,如下所示

angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
    var Forms = {};

    Forms.all = function() {

      return  $http.get('/api/forms.json')

    };

    return Forms;
}]);

angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
    'use strict';

     Forms.all().then(function(data){$scope.forms=data;});
}]);

我认为您应该简化您的源代码,如下所示

angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
    var Forms = {};

    Forms.all = function() {

      return  $http.get('/api/forms.json')

    };

    return Forms;
}]);

angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
    'use strict';

     Forms.all().then(function(data){$scope.forms=data;});
}]);

我认为您应该简化您的源代码,如下所示

angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
    var Forms = {};

    Forms.all = function() {

      return  $http.get('/api/forms.json')

    };

    return Forms;
}]);

angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
    'use strict';

     Forms.all().then(function(data){$scope.forms=data;});
}]);

您使用的是什么版本的AngularJS?您使用的是什么版本的AngularJS?您使用的是什么版本的AngularJS?您使用的是什么版本的AngularJS?