【问题标题】:Trying to recreate the Bootstrap 3, Angular JS and Typeahead demo example in Plunker尝试在 Plunker 中重新创建 Bootstrap 3、Angular JS 和 Typeahead 演示示例
【发布时间】:2014-07-02 21:52:36
【问题描述】:

我正在尝试使用 Bootstrap 3、Angular 和 Typeahead 获得一个正常工作的 Plunker,但我发现缺少一些样式,而且我的模型似乎没有正确绑定。我直接从演示页面复制了代码:

http://plnkr.co/edit/8BWdTjV3xllp6OWaMRFq

我在这里使用了所有正确的 JS 和 CSS 库吗?

【问题讨论】:

标签: angularjs typeahead.js bootstrap-tags-input


【解决方案1】:

通过访问您发布的Github repo,我设法找出您的代码有什么问题,使用example page 的源代码创建了AngularJS 示例的功能齐全的Plunker,并将其剥离直到我遇到与您所拥有的不匹配的代码。以下 Plunker 应该是您正在寻找的:

Plunker

我对您的 Plunker 进行了以下更改以使其正常工作:

  1. 您的bootstrap-tagsinput-angular-bs3.js 文件与我在上述存储库中找到的文件不匹配,因此我将其替换为存储库的代码。您似乎正在尝试使用导致问题的称为“Hogan”的东西。如果这很重要,请留言说明它是什么以及您需要它的原因,我会调查它。

  2. 我删除了 typeahead.jshogan.js 依赖项。第一个是不需要的,因为bootstrap-tagsinput.js 已经使用了它,第二个是因为我不确定它的作用。

  3. 由于某种原因,$scope.getTagClass 函数中的 switch 语句返回无效的 CSS 类。我将它们更改为以下内容:

    case 'Europe'   : return 'label label-info';
    case 'America'  : return 'label label-danger label-important';
    case 'Australia': return 'label label-success';
    case 'Africa'   : return 'label label-success'; // Note that 'label-inverse' made the object invisible
    case 'Asia'     : return 'label label-warning';
    
  4. 您尝试使用的 BootstrapJS 版本似乎不支持此 Typeahead 组件。我将 bootstrap.min.js 依赖项从 v3.1.1 更改为 v2.3.2。也许这是一个您应该调查的未报告的错误。

  5. 您删除了 $http 服务和 $scope.queryCities 功能,但这些对于使组件正常工作是必要的。您试图通过直接加载 cities.json 来跳过此操作,但这仅适用于 Typeahead 的初始填充,并且会导致 Typeahead 预测文本功能不起作用。我将$http 服务添加回您的CityTagsInputController 函数,并将以下函数添加到控制器中:

    $scope.queryCities = function(query) {
        return $http.get('cities.json');
    };
    
  6. 最后,您传递给bootstrap-tagsinput 指令的属性有两个问题。如上所述,您不能直接将cities.json 传入typeahead-source 属性。我将其更改为quertyCities。我还将tagClass 属性更改为getTagClass 而不是getTagClass(city)——这个属性只需要函数的名称,而不需要任何参数(即使是这样,你也从来没有定义过city)。

我确保上述每一项更改都是必要的,每次将它们添加回功能齐全的 Plunker(上图),并发现每一项都破坏了代码。因此,您需要进行所有这些更改才能使您的代码正常工作。希望这会有所帮助。

【讨论】:

  • 谢谢,这是一个很好的答案,虽然我在某些方面给了你一个红鲱鱼,对不起。我实际上是在使用来自此页面的拉取请求:github.com/TimSchlechter/bootstrap-tagsinput/pull/146 - 这似乎还没有被合并,也许是因为它还没有完全工作。由于从 Bootstrap 3 降级到 2.3.2,您的答案确实有效,我试图让最新版本与 V3 一起使用。但我刚刚发现我的 Angular Bootstrap UI 版本不依赖于 Bootstrap 3,实际上我可以降级到 V 2.3.2 :) - 感谢标记为已回答。
  • 实际上,如果您想成为更多的超级英雄,也许您可​​以建议一种方法,让我可以在该领域的焦点上弹出预先输入的下拉菜单?因此,当用户选择该字段时,他们可以立即使用向下箭头进行选择。任何想法都非常感谢!
  • 我建议使用ng-focus在焦点上应用一个类(例如.bootstrap-tagsinput.focus)到bootstrap-tagsinput标签,然后使用attrs.$observe()来监控何时添加类,并在回调函数,在上述指令下自动生成的<ul class="typeahead dropdown-menu"> 标记中设置display: block。如果您认为这种方法听起来不错,请发布另一个问题,我会尽力回答!
  • 我喜欢这个主意。我现在将此作为一个新问题提出,如果您能看一下,我将不胜感激:stackoverflow.com/questions/24659072/…
  • 我已经接近解决这个问题了!我可以像这样检测焦点:$('.bootstrap-tagsinput input').focus(function () { alert("focus"); }); 现在,如何显示下拉菜单?
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 2018-03-18
  • 2015-12-04
  • 2013-10-15
  • 1970-01-01
相关资源
最近更新 更多