【问题标题】:Angular ui bootstrap directive template missing缺少 Angular ui 引导指令模板
【发布时间】:2013-02-04 08:54:08
【问题描述】:

我目前正在我的机器上本地测试 angular bootstrap-UI。当我尝试重新创建手风琴和对话框的示例时。我在控制台中收到此错误消息,提示缺少模板。

错误示例: 404 未找到 - localhost/angular/template/message.html

当我查看 ui-bootstrap-0.1.0.js 时,指令有一个模板 URL

templateURL 用于指令的目的是什么?

当我下载整个 angular bootstrap-UI zip 文件时,是否应该包含这些模板?

我是否遗漏了应该包含在标题中的其他文件?

<link rel="stylesheet" href="includes/css/bootstrap.css">
<script src="includes/js/angular.js"></script>
<script src="includes/js/ui-bootstrap-0.1.0.js"></script>

【问题讨论】:

    标签: angularjs angular-ui


    【解决方案1】:

    我的问题是我仍然在 HTML 中包含模板 URL,如下所示:

    <div uib-accordion-group class="panel-default" heading="Custom template" template-url="group-template.html">
    

    这导致我的浏览器挂起 - 这很奇怪,但就是这样。

    总结一下,我做了什么:

    bower install bootstrap --save
    bower install angular-bootstrap --save
    

    在我的 index.html 中(注意“-tpls”):

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

    然后在我的 Angular 应用中:

    angular
      .module('myApp', ['ui.bootstrap'])
    

    然后只需删除 HTML 中的模板 URL:

    <div uib-accordion-group class="panel-default" heading="Custom template">
    

    繁荣,工作。

    【讨论】:

    • 那个“XXXXXXX-tpls.js”是诀窍,在 angular-bootstrap 页面上搜索,现在可以看到它,但并不明显。
    【解决方案2】:

    我不得不说阅读 cmets 并添加我昨晚 10 小时的经验。避免 UI Bootstrap 似乎比它的价值要付出更多的努力。

    还阅读了他们的 repo 问题和 cmets,该项目的整个执行方式似乎与一个简单易用的工具不一致。虽然我确信它一开始是出于好意,但也许这是一个尽可能避免使用的模块。

    当然需要注意的是,这是一种观点,也许我们会发现其他人是否有同样的感觉。

    【讨论】:

      【解决方案3】:

      此问题的可能原因是已接受的答案,但此问题的另一个可能原因是我遇到的问题,我想发布以防其他人遇到相同的次要原因。

      症状完全相同,引导模板上的 404 但在我的情况下,我实际上包含了“ui-bootstrap-tpls.min.js”javascript 文件。问题是我还包含了非模板版本“ui-bootstrap.min.js”。一旦两者都包括在内,我怀疑顺序很重要,一个会取代另一个。就我而言,非模板版本取代了导致 404 问题的模板版本。

      一旦我确定只包含“ui-bootstrap-tpls.min.js”,一切都按预期工作。

      【讨论】:

        【解决方案4】:

        在这个问题上浪费了 2 个小时后我的 5 美分。你应该:

        1. 转到http://angular-ui.github.io/bootstrap/。单击创建自定义构建并选择您使用的功能。 (没有必要为 1 项拉 60k)。
        2. 包括custom.tpls.js,在我的例子中是ui-bootstrap-custom-0.10.0.min.js
        3. 在你的 Angular 模块中包含 'ui.bootstrap.yourfeature' 在我的例子中是 'ui.bootstrap.modal'
        4. 还包括 'ui.bootstrap.tpls'。所以我的模块完整依赖如下所示:

          var profile = angular.module("profile",[ 'ui.bootstrap.modal', 'ui.bootstrap.tpls' ]);

        5. 节省 2 小时,快乐 :-)。

        【讨论】:

        • ui.boostrap.tpls 部分是一大步。我已经浪费了大约 3 个小时试图让它工作。
        • 天哪……我已经花了 3-4 个小时试图弄清楚为什么模板无法加载……谢谢。
        • 很高兴它有帮助,布雷迪。如果我有超过 15 分钟的问题,我会强迫自己, - 在堆栈上提问。成功并不容易。祝你好运,不要犹豫,问:-)
        • 天哪,我花了这么多时间在这上面......从我的灵魂和心灵的底部,谢谢你!
        • 在应用程序中注入 'ui.bootstrap.tpls' 是关键。我只注入了“ui.bootstrap”,所以当我同时注入它时,它就起作用了。感激不尽。
        【解决方案5】:

        你有两个选择:

          1234563 @
        1. 如果您确实想制作一些自己的模板,请在您的应用程序中创建一个 templates 文件夹,然后从 angular-ui/bootstrap 项目下载模板。然后覆盖您要自己自定义的那些。

        在此处阅读更多信息:https://github.com/angular-ui/bootstrap/tree/gh-pages#build-files

        编辑

        你也可以下载 bootstrap-tpls.js 并且仍然用你自己的覆盖指令的一些 templateUrls,使用 AngularJS 装饰器来改变指令的 templateUrl。下面是一个改变 datepicker 的 templateUrl 的例子:

        http://docs.angularjs.org/api/AUTO.$provide#methods_decorator

        myApp.config(function($provide) {
          $provide.decorator('datepickerDirective', function($delegate) {
            //we now get an array of all the datepickerDirectives, 
            //and use the first one
            $delegate[0].templateUrl = 'my/template/url.html';
            return $delegate;
          });
        });
        

        【讨论】:

        • 感谢您的提示。我假设我只需要 ui-bootstrap-0.1.0.js 不知道我还需要 ui-bootstrap-tpls-0.1.0.js。仅当 bootstrap-ui 注意到这两个 js 文件也需要时。
        • 您不需要两者 - 您可以选择其中一个。一个拥有所有的 javascript + 模板,一个只有 javascript。你是对的,我们确实需要在主自述文件中说明这一点,而不仅仅是 gh-pages 自述文件。
        • 我还发现启动应用时需要列出tpls依赖:angular.module('YourApp', ['ui.bootstrap.tpls']);
        • @Andy Joslin 有没有办法覆盖引导程序查找模板的位置?例如,如果我有一个视图或部分文件夹,我可以以某种方式映射到其中任何一个位置吗?
        • 我没明白我必须在指令名称 m( ....this help: Experiment: Decorating Directives 中添加“指令”
        【解决方案6】:

        尽管在我的 index.html 中定义了两个必需的脚本,但我遇到了同样的错误。最后,我通过将 ui-bootstrap.js 脚本设置为首先加载,然后像这样设置 ui-bootstrap-tpls.js 来更改加载顺序。这解决了问题。但是,后来我注意到(如上所述)只需要一个库。所以我删除了 ui-bootstrap.js

        【讨论】:

          【解决方案7】:

          此错误消息似乎也出现在另一种情况下,如下所示: http://plnkr.co/edit/aix6PZ?p=preview

          如果您声明您的模块依赖项仅是“ui.bootstrap.dialog”而不是“ui.bootstrap”,则 Angular 会产生一个找不到模板的错误。

          以下是“为什么”的官方解释: https://github.com/angular-ui/bootstrap/issues/266

          【讨论】:

          • 哇......我不敢相信我只是花了 2 个小时试图打开一个模式......都是因为几个字符。谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-27
          相关资源
          最近更新 更多