Angular js数据服务填充下拉列表

时间:2016-12-08 12:14:42

标签: javascript angularjs

我创建了一个服务来从数据库中获取数据。该服务不会填充下拉列表

响应数据中的值为:[{" ID":1,"名称":"名称1"},{" ID&#34 ;:2"名称":"名称2"}]

HTML

<md-input-container flex>
            <md-select ng-model="selected.topic" required>
                <md-option ng-repeat="topic in topics" value="{{topic.ID}}">{{topic.Name}}</md-option>
            </md-select>
        </md-input-container>

javascript控制器

$scope.topics = getTopicsService.getTopics(baseUrl);

服务:

MyApp.factory('getTopicsService', function ($http) {
    return {
        getTopics: function (baseUrl)
        {
            return $http.post(baseUrl + 'Admin/getTopics').then(function (response) {
                return $.parseJSON(response.data);
            });
        }
    }
});

2 个答案:

答案 0 :(得分:2)

嗯,试着重新构建你的承诺处理一点点。

服务:

MyApp.factory('getTopicsService', function ($http) {
    return {
        getTopics: function (baseUrl)
        {
            return $http.post(baseUrl + 'Admin/getTopics');
        }
    }
});

控制器:

getTopicsService.getTopics(baseUrl).then(function(response) {
    $scope.topics = $.parseJSON(response.data);
});

现在调试问题要容易一些。 如果它仍然不起作用:

  1. 检查您的http回调中是否收到了正确的回复。验证数据是否以预期结构返回。
  2. 确保您的控制器和模板设置正确,以便模板可以访问控制器的范围变量(仅通过将范围变量记录为模板中的角度表达式进行测试)。
  3. 编辑1: 您的解决方案无法正常工作的原因是您从服务方法getTopics返回$ http调用。您的服务功能在承诺本身已解决之前返回。因此,您将$http请求对象本身绑定到您的范围变量而不是请求的响应。

    通过在http请求的回调中向您的范围变量添加response.data,您确保将范围变量设置为 AFTER 您的承诺。

答案 1 :(得分:0)

您需要为此范围变量赋值,

getTopicsService.getTopics(baseUrl).then(function(resp){ $scope.topics = resp.data; });