尝试使用自动完成推送添加对象时缺少 $$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 同步,这样一切都等到数据下载完成。
带有硬编码对象的数组出现在我的 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 同步,这样一切都等到数据下载完成。