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

时间:2013-11-23 00:35:12

标签: javascript angularjs angular-ui angular-ui-bootstrap

Plunker Code Showing Issue Described Below

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

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

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

enter image description here

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}}

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

enter image description here

Angular Goodness

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);
    };

});

2 个答案:

答案 0 :(得分:19)

UI-Bootstrap依赖于ui-bootstrap- [version] .js文件中不存在的模板。构建文件配置选项描述为here。相关摘录:

  

名称中包含-tpls的文件   与指令捆绑在一起的特定于引导程序的模板。适合那些人   想要采取所有指令,不需要定制任何东西   解决方案是获取一个名为的文件   UI-自举-tpls- [版] .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',
    ...
  };
}])

编辑,包括@ inolasco的回答:

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

'ui.bootstrap.tpls'

到您的模块。

答案 1 :(得分:12)

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

  

'ui.bootstrap.tpls'

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