90

ui-bootstrap-tpls ファイルから単一の特定のテンプレートをオーバーライドする方法があるかどうかに興味があります。デフォルトのテンプレートの大部分は私のニーズに合っていますが、すべてのデフォルトのテンプレートを取得して非 tpls バージョンに接続するプロセス全体を実行せずに置き換えたい特定のテンプレートがいくつかあります。

4

4 に答える 4

123

はい、http://angular-ui.github.io/bootstrapのディレクティブは高度にカスタマイズ可能で、テンプレートの 1 つを簡単にオーバーライドできます (他のディレクティブはデフォルトのテンプレートに依存しています)。

$templateCachefeedを直接フィードする (ui-bootstrap-tplsファイルで行われているように) か、おそらくもっと単純に、<script>ディレクティブ ( doc ) を使用してテンプレートをオーバーライドするだけで十分です。

アラートのテンプレートをスワップxするように変更している不自然な例をClose以下に示します。

<!doctype html>
<html ng-app="plunker">
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
    <script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.4.0.js"></script>
    <script src="example.js"></script>
    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">

    <script id="template/alert/alert.html" type="text/ng-template">
      <div class='alert' ng-class='type && "alert-" + type'>
          <button ng-show='closeable' type='button' class='close' ng-click='close()'>Close</button>
          <div ng-transclude></div>
      </div>
    </script>
  </head>

  <body>
    <div ng-controller="AlertDemoCtrl">
      <alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)">                     
        {{alert.msg}}
      </alert>
      <button class='btn' ng-click="addAlert()">Add Alert</button>
    </div>
  </body>
</html>

ライブ プランカー: http://plnkr.co/edit/gyjVMBxa3fToYTFJtnij?p=preview

于 2013-07-16T13:09:36.677 に答える
81

使用する$provide.decorator

を使用$provideしてディレクティブを装飾すると、 を直接いじる必要がなくなり$templateCacheます。

代わりに、通常どおり、任意の名前で外部テンプレート html を作成し、それtemplateUrlを指すようにディレクティブをオーバーライドします。

angular.module('plunker', ['ui.bootstrap'])
  .config(['$provide', Decorate]);

  function Decorate($provide) {
    $provide.decorator('alertDirective', function($delegate) {
      var directive = $delegate[0];

      directive.templateUrl = "alertOverride.tpl.html";

      return $delegate;
    });
  }

pkozlowski.opensource のplunkrのフォーク: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview

alert(装飾するディレクティブ名に 'Directive' サフィックスを追加する必要があることに注意してください。上記では、UI Bootstrap のディレクティブを装飾しているので、名前を使用しますalertDirective。)

をオーバーライドするだけでなく、多くの場合templateUrl、これはディレクティブをさらに拡張するための適切な出発点を提供します。たとえば、リンクまたはコンパイル関数 (たとえば) をオーバーライド/ラップすることによってです。

于 2014-10-13T12:22:32.960 に答える
27

pkozlowski.opensourceからの回答は本当に役に立ち、私を大いに助けてくれました! すべての角度テンプレートのオーバーライドを定義する単一のファイルを作成し、ペイロード サイズを抑えるために外部 JS をロードするように調整しました。

これを行うには、angular ui-bootstrap ソース js ファイル (例: ) の下部に移動し、ui-bootstrap-tpls-0.6.0.js目的のテンプレートを見つけます。テンプレートを定義するブロック全体をコピーして、オーバーライド JS ファイルに貼り付けます。

例えば

angular.module("template/alert/alert.html", []).run(["$templateCache", function($templateCache) {
  $templateCache.put("template/alert/alert.html",
     "      <div class='alert' ng-class='type && \"alert-\" + type'>\n" +
     "          <button ng-show='closeable' type='button' class='close' ng-click='close()'>Close</button>\n" +
     "          <div ng-transclude></div>\n" +
     "      </div>");
}]);

次に、ui-bootstrap の後にオーバーライド ファイルを含めるだけで、同じ結果が得られます。

pkozlowski.opensourceの plunk のフォーク バージョンhttp://plnkr.co/edit/iF5xw2YTrQ0IAalAYiAg?p=preview

于 2013-11-01T02:48:46.153 に答える
7

を使用template-url="/app/.../_something.template.html"して、そのディレクティブの現在のテンプレートをオーバーライドできます。

(少なくとも Accordion Bootstrap では動作します。)

于 2015-11-13T16:46:30.293 に答える