在AngularJS中,$ http不会更改我的选择选项标记数据

时间:2016-04-22 09:52:27

标签: angularjs angularjs-scope angularjs-http angularjs-ng-options

我在AngularJS中遇到使用$ http从服务器获取数据的问题。 这是我的HTML

//arrayOfCustomObjects is the array that contains your objects to be sorted
//Replace YourCustomObject with the actual class of the objects
NSArray* sortedArray = [arrayOfCustomObjects sortedArrayUsingComparator:^NSComparisonResult(YourCustomObject* obj1, YourCustomObject* obj2) {

    NSString* title1 = ((CourseText*)obj1.titles.anyObject).title;
    NSString* title2 = ((CourseText*)obj2.titles.anyObject).title;

    return [str1 compare:str2];

}];

这是我的AngularJS脚本

<select ng-model="foo" ng-options="item as item.name for item in items"></select>

这段代码的期望是当$ http从服务器获取数据时,选择下拉数据会发生变化。但它没有改变任何东西。我还在成功回调中的控制台中打印了响应项。

也许我不太了解$ http的使用情况。也许当我在getData()之后控制数据时; $ scope.items根本不会改变。我认为也许$ http总是在最后阶段运行。

有人可以帮忙解释这个问题吗?如果我的假设是正确的,我正在寻找什么解决方案?

2 个答案:

答案 0 :(得分:0)

我认为您只需要添加track by子句:

ng-options="item as item.name for item in items track by item.id"

答案 1 :(得分:0)

检查响应对象。当您使用'then'回调来获取已解析的数据时,实际的API结果将存储在响应的'data'属性中。所以将代码更改为

$scope.items = response.data;

或者您可以使用成功回调直接附加数据。

        $http.get("ng/getData")
            .success(function(response) {
                if (response.status == 200) {
                    $scope.items = response.items;
                }
            });