我无法显示自动完成列表。我的服务返回json模型:TagID:1,text:MyText 但自动完成列表永远不会显示。我的HTML:
<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调用MVC Controller返回的Json。
public async Task<ActionResult> GetMajorTags()
{
majorId = UserInfo.intMajorID;
var tags = await CompanyClient.GetAvailableTags(majorId);
return Json(tags, JsonRequestBehavior.AllowGet);
}
甚至绕过服务并直接调用MVC Controller方法如下:
$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控制器返回的内容,即使返回的数据是完全相同的格式。
非常感谢任何帮助!
答案 0 :(得分:0)
此代码不正确:
UPDATE empresa_cliente SET regime_tributacao_federal = 1 WHERE cnpj_emp = '3333222000111';
没有理由在$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
});
});
}
回调中包含return语句。哪里会回归?如果你做了这样的事情:
success
...标签将是未定义的。原因是因为return语句没有从调用var tags = $scope.loadTags();
console.log(tags); // undefined
返回。而是从promise回调中返回。
这实际上就是这样做的:
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
将包含一个promise对象而不是您的数据。您需要执行以下操作来获取实际数据:
tags