すべてのUIタブを管理する角度サービスがあります。それはアイコン、ラベル、URLなどのタブについて必要なすべての情報を持っているオブジェクトが含まれています。私は1つの私のタブの動的なカウンターを持っているユースケースを持っていますが、それは働いている。AngularJS:スコープなしの文字列で角度コードをコンパイルする
サービススニペット:
angular.module('app.services').service('tabService', function($rootScope, $route, $location) {
var tabs = {
"/front": {
"search": {
label: "Search",
url: "/search",
classIcon: "fa fa-search",
urlMatchAddt: ['/searchResults','/productDetails']
},
"order": {
label: "Order",
url: "/cart",
classIcon: "fa fa-shopping-bag"
} ....
HTMLコード:index.htmlを(tabServiceは私のBaseCtrlコントローラに注入される)
<body ng-app="app" ng-controller="BaseCtrl">
...
<li ng-repeat="t in tabService.getTabs()" ng-class="{active: tabService.isActiveTab(t.url)}" ng-cloak>
<a href="#{{t.url}}"><i class="{{t.classIcon}}" aria-hidden="true" ng-bind-html=""></i> <span ng-bind-html="t.label | trustHTML"></span></a>
</li>
....
</body>
それでは、私は例えばやろうとしていますがlabel
であります私のタブのフィールド私は何かを入れたい
label: "Order - {{counter}}"
だから毎tim e {{counter}}
変数を更新すると、自分のラベルも更新されます。 label
にはHTMLコードが含まれているので、私はng-bind-html
指令を使用しています。
現在、変数に醜い$watch
を実行しています。変更すると、手動で、ラベル値を更新された値を含む新しい文字列で完全に上書きしています。
私は$compile
を使用しようとしましたが、$rootScope
と一緒に使用することはできません。$scope
を私のサービスに渡すことはできません。私は最良の解決策が何であるか分かりません。
アイデア?
AngularJS:1.6
のようなものでなければなりませんか?なぜこれらの不気味なng-bind-htmlがありますか? – estus
@estus私の 'label'属性のいくつかはHTMLを持っています。例は私の 'カウンター'がフォントのようなアイコンを利用するためにスパンタグにラップされるでしょう –
それから質問にこれを反映させてください。また、いくつかのテンプレートがありますが、それはどこから来ているのか分かりません。それは指令ですか?それはサービスとどのように結びついていますか? – estus