ngTagsInput自动完成功能无法打开

时间:2017-07-10 19:28:30

标签: ajax asp.net-mvc ng-tags-input

我无法显示自动完成列表。我的服务返回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控制器返回的内容,即使返回的数据是完全相同的格式。

非常感谢任何帮助!

1 个答案:

答案 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