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

时间:2015-02-03 13:42:25

标签: javascript jquery angularjs autocomplete

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

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

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

  $(".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并且它添加到数组但是没有显示在我的重复中。 关于如何更改此代码以使其工作的任何想法? 或者我应该寻找更多“角度方式”的其他autcompletes?

2 个答案:

答案 0 :(得分:2)

解决方案是向track by添加ng-repeat,以便AngularJS无需使用$$hashkey来跟踪更改。

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

答案 1 :(得分:0)

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