0

我有一个 UserAddController,我希望能够访问由 Web API 返回的国家/地区列表。Web API 可以正常返回数据。这是我获取数据的 app.js:

app.factory('Country', function ($resource) {
    return $resource(
        "/api/country/:Id",
        { Id: "@Id" },
        { "update": { method: "PUT" } });  
});

这是我的控制器:

var UserAddController = function ($scope, $location, service, User) {

    $scope.action = "Add";
    $scope.countries = service.countries;

};

我在这里声明并创建服务:

app.factory('CountryService', CountryService);

function CountryService($resource) {
    return $resource(
       "/api/country/:Id",
       { Id: "@Id" },
       { "update": { method: "PUT" } });  
}

我使用与上面相同的代码仅用于测试目的。我正在注入这样的服务:

UserAddController.$inject = ['$scope', 'CountryService'];

这是我第一次尝试依赖注入,我不知道我哪里出错了。我目前得到的错误是“服务未定义”。我尝试将服务和 Country 对象都传递给 Controller,结果相同。任何人都可以提供任何建议吗?

编辑:在我的控制器中,这会成功填充代码中的警报,但没有警报不会填充。这是什么原因?

function CountryService($rootScope, $http) {
    var self = {};

    //self.countries = [{ "$id": "1", "CountryId": 1, "CountryName": "United Kingdom" }, { "$id": "2", "CountryId": 2, "CountryName": "Republic of Ireland" }, { "$id": "3", "CountryId": 3, "CountryName": "Australia" }, { "$id": "4", "CountryId": 4, "CountryName": "New Zealand" }, { "$id": "5", "CountryId": 5, "CountryName": "United States" }, { "$id": "6", "CountryId": 6, "CountryName": "France" }, { "$id": "7", "CountryId": 7, "CountryName": "Germany" }, { "$id": "8", "CountryId": 8, "CountryName": "Finland" }];

    $http({
        method: 'GET',
        url: '/api/country'
    }).success(function (data, status, headers, config) {
        self.countries = data;
    });
    alert(self.countries);
    return self;
}
4

2 回答 2

1

您需要添加其他服务/依赖项。

UserAddController.$inject = ['$scope', 
                             '$location', 
                             'CountryService', 
                             'UserService'];

我假设最后一个依赖项是一个名为“UserService”的服务。它的签名是

app.factory('UserService', UserService);

编辑 :

您需要实例化一个新变量。

//Inside function body
$scope.countries = service.countries;
$scope.newCountry = $scope.countries.get({Id : someId},callbackFn);

现在您在 $scope.newCountry 中有一个带有 'someId' 的国家

于 2013-07-27T12:29:14.727 回答
0

确保您注入了 ngResource

app = angular.module("app", ['ngResource']);

您需要正确注入模块

UserAddController.$inject = ['$scope', '$location', 'CountryService', 'user'];

这是引用的文档

您可以使用 $inject 属性指定服务名称,该属性是一个包含要注入的服务名称的字符串的数组。该名称必须与使用 angular 注册的相应服务 ID 匹配。服务 ID 的顺序很重要:在调用带有注入参数的工厂函数时,将使用数组中服务的顺序。

我创建了一个FIDDLE,你可以试试。

于 2013-07-27T12:58:10.210 回答