Angular UI-Router无法加载我没有要求的模板

mcc*_*inz 8 javascript angularjs angular-ui angular-ui-bootstrap

Plunker代码显示下面描述的问题

http://plnkr.co/edit/Bz3Qhf1eDuFrnKI0qnUo?p=preview

我使用AngularUI套件的两个组件,UI-Router和UI-Bootstrap.当用户点击我的顶部导航栏链接时,UI-Router负责加载模板.

只有"UI窗口小部件模板"(AngularUI-Bootstrap和Alert)下的前两个链接处于活动状态

在此输入图像描述

UI-Bootstrap负责在模板中制作漂亮的小部件.我似乎正确配置了UI-Router,因为我正在加载正确的模板,这些模板可以访问正确的控制器.我遇到的问题是我的UI-Bootstrap组件无法加载并生成奇怪的错误,似乎表明他们在某种程度上试图自己加载模板??? 我在实现中错误处理了什么导致Bootstrap-UI指令无法加载?

警报下拉链接的HTML模板

<tabset>
  <tab heading="Static title">Static content</tab>
  <tab ng-repeat="tab in tabs" heading="{{tab.title}}" active="tab.active"           disabled="tab.disabled">
    {{tab.content}}
  </tab>
  <tab select="alertMe()">
  <tab-heading>
    <i class="icon-bell"></i> Select me for alert!
  </tab-heading>
  I've got an HTML heading, and a select callback. Pretty cool!
  </tab>
 </tabset>

{{tabs}}
Run Code Online (Sandbox Code Playgroud)

加载警报模板时来自控制台的错误消息

在此输入图像描述

角度善良

angular.module("uiRouterExample", [
'ui.router',
'ui.bootstrap']).config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider
        .state('home', {
            url: '/home',
            templateUrl: 'templates/home.html',
            controller: 'BSCtrl'
        })
        .state('angularBS', {
            url: '/angularBS',
            templateUrl: 'templates/angularBS.html',
            controller: 'BSCtrl'
        })
        .state('alert', {
            url: '/alert',
            templateUrl: 'templates/alert.html',
            controller: 'BSCtrl'
        })
    ;
})
.controller('BSCtrl', function ($scope) {

    $scope.tabs = [
      { title:"Accordion", content:"Dynamic content 1" },
      { title:"Alert", content:"Dynamic content 2"},
      {title:"Buttons", content:"More Dynamic Content"}
    ];

    $scope.test="Hello World";

    $scope.alerts = [
      { type: 'error', msg: 'Oh snap! Change a few things up and try submitting again.' }, 
      { type: 'success', msg: 'Well done! You successfully read this important alert message.' }
    ];

    $scope.addAlert = function() {
      $scope.alerts.push({msg: "Another alert!"});
    };

    $scope.closeAlert = function(index) {
      $scope.alerts.splice(index, 1);
    };

});
Run Code Online (Sandbox Code Playgroud)

Sar*_*rah 19

UI-Bootstrap依赖于ui-bootstrap- [version] .js文件中不存在的模板.此处描述构建文件配置选项.一个相关的片段:

名称中带有-tpls的文件具有与指令捆绑在一起的特定于引导程序的模板.对于想要获取所有指令而不需要自定义任何内容的人来说,解决方案是获取名为ui-bootstrap-tpls- [version] .min.js的文件.另一方面,如果默认模板不是您需要的,您可以使用ui-bootstrap- [version] .min.js并提供您自己的模板......

在plunkr中,您使用的是ui-bootstrap-0.7.0.js,而不是ui-bootstrap-tpls-0.7.0.js.前者不与模板捆绑在一起,但仍然在指令'templateUrls下对它们进行硬编码引用,例如:

.directive('alert', function() {
  return {
    ...
    templateUrl:'template/alert/alert.html',
    ...
  };
}])
Run Code Online (Sandbox Code Playgroud)

编辑,包括@ inolasco的答案:

如果您使用ui-bootstrap-tpls.js但仍然存在此问题,则可能需要添加

'ui.bootstrap.tpls'
Run Code Online (Sandbox Code Playgroud)

到你的模块.


ino*_*sco 12

添加到已接受的答案,这导致我解决类似的问题.如果您使用ui-bootstrap-tpls.js并且仍然存在此问题,则可能需要添加

'ui.bootstrap.tpls'

到你的模块.这对我有用.