AngularJS $ http未定义

ron*_*nen 3 angularjs

我对AngularJS很新.当我打电话时,$http.get我得到一个$http is not defined错误.

这是我的模块的内容:

var demoApp = angular.module('demoApp', []);

demoApp.config(function ($routeProvider) {
    $routeProvider.
        when('/view1',
        {
            controller: 'SimpleController',
            templateUrl: 'View1.html'
        }).
        when('/view2',
        {
            controller: 'SimpleController',
            templateUrl: 'View2.html'
        })
        .otherwise({ redirectTo: '/view1' });
});

demoApp.factory('simpleFactory', function () {

    var factory = {};
    factory.getAnnounces = function ($http) {
        $http.post("http://localhost:57034/Announce/GetAllAnnounces")
           .success(function (data, status, headers, config) {
               return data;
           }).error(function (data, status, headers, config) {
               return status;
           });
           };
    return factory;
});

demoApp.controller('SimpleController', function ($scope,simpleFactory) {

    $scope.announces = [];
    init();
    function init()
    {
        $scope.announces= simpleFactory.getAnnounces();
    }

});
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?干杯.

Dav*_*lli 10

您需要按如下方式查看代码:

demoApp.factory('simpleFactory', ['$http', function ($http) {

    return {
        getAnnounces: function () {
            $http.post("http://localhost:57034/Announce/GetAllAnnounces")
               .success(function (data, status, headers, config) {
                   return data;
               }).error(function (data, status, headers, config) {
                   return status;
               });
        }
    };

}]);
Run Code Online (Sandbox Code Playgroud)

不需要$httpgetAnnounces方法定义中传递变量,因为它已在工厂函数的范围内定义.

我正在为AngularJS使用参数别名以避免缩小器的问题,请参阅AngularJS网站上的"关于缩小注释 " .

注意反正$http.post.success$http.post.error异步的,你将不能够除非你使用的承诺(获取数据$q),见这里.因此,您可以这样更改代码:

demoApp.factory('simpleFactory', ['$http', '$q', function ($http, $q) {

    return {
        getAnnounces: function () {
            var deferred = $q.defer();

            $http.post("http://localhost:57034/Announce/GetAllAnnounces")
               .success(function (data, status, headers, config) {
                   deferred.resolve(data);
               }).error(function (data, status, headers, config) {
                   deferred.reject(data);
               });

            return deferred.promise;
        }
    };

}]);
Run Code Online (Sandbox Code Playgroud)

并在SimpleController:

demoApp.controller('SimpleController', ['simpleFactory', '$scope', function (simpleFactory, $scope) {

    $scope.announces = []; 

    simpleFactory.getAnnounces()
        .then(function(data) {
            // call was successful
            $scope.announces = data;
        }, function(data) {
            // call returned an error
            $scope.announces = data;
        });

}]);
Run Code Online (Sandbox Code Playgroud)