我无法显示自动完成列表。我的服务返回 json 模型:标记 ID:1,文本:我的文本 但"自动完成"列表从不显示。 我的网页:
<tags-input ng-model="tags" tag-class="{even: $index % 2 == 0, odd: $index % 2 != 0}" on-tag-added="addTag(tags)"> <auto-complete source="loadTags($query)"></auto-complete> </tags-input>
我的控制器代码:
$scope.loadTags = function ($query) {
var tags;
contractorService.gettags()
.success(function (data) {
tags = data;
return tags.filter(function(tag) {
return tag.text.toLowerCase().indexOf($query.toLowerCase()) != -1
更新
我发现它只是不喜欢从 Ajax 调用返回的 Json 到 MVC 控制器。
public async Task<ActionResult> GetMajorTags()
{
majorId = UserInfo.intMajorID;
var tags = await CompanyClient.GetAvailableTags(majorId);
return Json(tags, JsonRequestBehavior.AllowGet);
}
甚至绕过服务并直接调用 MVC 控制器方法,如下所示:
$scope.loadTags = function (query) {
return $http.get('/SSQV4/SSQV5/Contractor/GetMajorTags');
};
如果我像下面这样将源设置为静态:
var auto = [
{ TagID: 4,text: 'Tag4' },
{ TagID: 5, text: 'Tag5' },
{ TagID: 6, text: 'Tag6' }
];
它可以工作,但它不会显示从 MVC 控制器返回的内容,即使返回的数据采用完全相同的格式。
任何帮助将不胜感激!
此代码不正确:
$scope.loadTags = function ($query) {
var tags;
contractorService.gettags()
.success(function (data) {
tags = data;
// return where?
return tags.filter(function(tag) {
return tag.text.toLowerCase().indexOf($query.toLowerCase()) != -1
});
});
}
没有理由在success
回调中包含 return 语句。那会回到哪里?如果你做了这样的事情:
var tags = $scope.loadTags();
console.log(tags); // undefined
。标记将未定义。原因是因为 return 语句没有从对loadTags
的调用返回。而是从承诺回调中返回。
这实际上是它是如何完成的:
var tags = [];
$scope.loadTags = function () {
contractorService
.gettags()
.success(function (data) {
tags = data;
tags = tags.filter(function(tag) {
return tag.text.toLowerCase().indexOf($query.toLowerCase()) != -1;
});
});
};
请注意,没有返回语句(筛选器除外(。
这根本不起作用:
$scope.loadTags = function (query) {
return $http.get('/SSQV4/SSQV5/Contractor/GetMajorTags');
};
如果你要做这样的事情:
var tags = $scope.loadTags();
console.log(tags); // promise object. NO DATA
tags
将包含一个承诺对象,而不是您的数据。您需要执行以下操作才能获取实际数据:
var tags = [];
$scope.loadTags().success(function(data) {
tags = data;
});