10

我在我的 ruby​​ on rails 项目中有一个正在运行的 Angular 应用程序,现在我想使用 angular.js 实现一些预先输入的搜索,但找不到如何制作的解决方案typeahead directive running

问题:如何将 angular typeahead 指令安装到我的项目中?

使用下面描述的当前解决方案,我得到了这个控制台:

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:3000/template/typeahead/typeahead.html
  • ng-app 正在工作,相关的 js 和 css 文件也链接到 html 中。

我正在关注这个来源:bootstrap-ui-angularjs

我已经做了什么:

  1. 下载angular-ui-bootstrap.jspublic\assets\javascripts目录
  2. 通常表现为资产管道:

    //= 需要 jquery //= 需要 jquery_ujs //= 需要 jquery.tokeninput //= 需要 bootstrap //= 需要 angular //= 需要 angular-ui-bootstrap //= require_tree 。

3.检查是否js在页面上:(只是有问题的脚本)

<link href="/assets/bootstrap.css?body=1" media="all" rel="stylesheet" type="text/css" />
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/angular.js?body=1" type="text/javascript"></script>
<script src="/assets/angular-ui-bootstrap.js?body=1" type="text/javascript"></script>

my ng-app:

    <div ng-app='plunker'>

      <div class='container-fluid' ng-controller="TypeaheadCtrl">
        <pre>Model: {{result | json}}</pre>
        <input type="text" ng-model="result" typeahead="suggestion for suggestion in cities($viewValue)">
      </div>

    </div>

<script>

    angular.module('plunker', ['ui.bootstrap']);
    function TypeaheadCtrl($scope, $http, limitToFilter) {

        //http://www.geobytes.com/free-ajax-cities-jsonp-api.htm

        $scope.cities = function(cityName) {
            return $http.jsonp("http://gd.geobytes.com/AutoCompleteCity?callback=JSON_CALLBACK &filter=US&q="+cityName).then(function(response){
                return limitToFilter(response.data, 15);
            });
        };

    }

</script>

在安装现有的角度指令方面我有什么遗漏吗?例如来自这个链接

4

5 回答 5

16

您可以使用 ui-bootstrap-tpls.js,而不是使用 ui-bootstrap.js。这个 js 文件随模板一起提供。

要使用 ui-bootstrap-tpls.js,您必须将 js 文件添加到您的 html 中:

<script src="/scripts/angular-ui/ui-bootstrap-tpls.js"></script>

并且在您的模块中,您必须添加这些依赖项:

angular.module('myModule', ['ui.bootstrap', 'ui.bootstrap.typeahead']);

如果您执行这两个步骤,您将不会再收到此消息:

加载资源失败:服务器响应状态为 404(未找到)_http://localhost:3000/template/typeahead/typeahead.html

经常发生的情况是人们只添加了js文件而忘记了向模块添加依赖。

于 2014-10-21T21:25:05.070 回答
9

GitHub 代码还包含一个名为 template 的文件夹,其中有一个用于预先输入的模板文件夹。您是否已将其下载并添加到正确位置的项目中。

在此处输入图像描述

由于缺少此预先输入的模板 html 文件,该错误似乎即将到来。如果已添加,请检查位置是否正确。

于 2013-08-16T09:02:27.447 回答
5

如果 ui-bootstrap-tpls.js 文件不起作用或者您想使用 ui-bootstrap.js 文件,您可以将模板添加到您的网页:

<script type="text/ng-template" id="template/typeahead/typeahead-popup.html">
<ul class="dropdown-menu" ng-if="isOpen()" ng-style="{top: position.top+'px', left: position.left+'px'}" style="display: block;" role="listbox" aria-hidden="{{!isOpen()}}">
    <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)" role="option" id="{{match.id}}">
        <div typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>
    </li>
</ul>
</script>

<script type="text/ng-template" id="template/typeahead/typeahead-match.html">
    <a tabindex="-1" bind-html-unsafe="match.label | typeaheadHighlight:query"></a>
</script>
于 2014-08-14T18:53:30.260 回答
2

确保包含包含模板的正确 .js 文件。

我用“ ui -bootstrap-tpls.min.js ”替换了“ ui-bootstrap.min.js ”

这为我修好了。另请参阅ui-bootstrap-tpls.min.js 和 ui-bootstrap.min.js 有什么区别?

于 2014-08-20T09:40:37.607 回答
0

解决方案:

  1. 新建一个文件夹public\template\typeahead

  2. typeahead.html从此下载到步骤 1 中创建的目录。

于 2013-08-16T09:22:32.030 回答