尝试使用自动完成推送添加对象时缺少 $$Hashkey

$$Hashkey missing when trying to add object with push from autocomplete

带有硬编码对象的数组出现在我的 ng-repeat 中。

  $scope.deltagarelist = [{ label: "Nils", value: "3" }];

这是我的 javascript/angular 混合代码,用于从自动完成中获取选定的值并将其推送到我的对象数组中。

  $(".addDeltagare").autocomplete(
{
    source: function (request, response) {

        $.ajax({
            url: url,
            data: { query: request.term },
            datatype: 'jsonp',

            success: function (data) {


                response($.map(data, function (item) {
                    return {

                        label: item.Label,
                        value: item.Value
                    }
                }));
            }


        });


    },
    minLength: 3,
    select: function (event, ui) {
        event.preventDefault();

        addtolist(ui.item);
        console.log($scope.deltagarelist);

        $(this).val('');

    },
    focus: function (event, ui) {
        $("#addDeltagare").val(ui.item.label);
        return false;
    }

});

还有我将对象推入列表的函数。

function addtolist(item) {

$scope.deltagarelist.push({label:item.label,value:item.value});

}

我的问题是我的硬编码人员 "Nils" 得到一个 $$hashkey 但是当我以这种方式将对象添加到列表时它没有得到 hashkey 并且它添加到数组但没有显示在我的重复。 关于如何更改此代码以使其工作的任何想法? 或者我应该寻找更多 "the angular way" 的其他自动完成功能?

解决方案是向您的 ng-repeat 添加 track by,这样 AngularJS 就不需要使用 $$hashkey 来跟踪更改。

<div ng-repeat="val in deltagarelist track by val.value">

$ajax 是异步的,这意味着 NG-app 在下载数据之前就已经构建好了。解决方法是使 $ajax 同步,这样一切都等到数据下载完成。