スコープ変数を介してテンプレートの URL を渡そうとしています。スコープは変更されないため、それに基づいてテンプレートを更新する必要はありませんが、現在、スコープ変数は常に未定義です。
<div cell-item template="{{col.CellTemplate}}"></div>
理想的には、ディレクティブは次のようになります。
.directive("cellItem", ["$compile", '$http', '$templateCache', '$parse', function ($compile, $http, $templateCache, $parse) {
return {
scope: {
template: '@template'
},
templateUrl: template // or {{template}} - either way
};
}])
ただし、これは機能しません。同じ概念を実現するためにさまざまな順列を試しましたが、これが最も近いようですが、まだ機能しません。
.directive("cellItem", ["$compile", '$http', '$templateCache', '$parse', function ($compile, $http, $templateCache, $parse) {
return {
scope: {
template: '@template'
},
link: function (scope, element, attrs) {
var templateUrl = $parse(attrs.template)(scope);
$http.get(templateUrl, { cache: $templateCache }).success(function (tplContent) {
element.replaceWith($compile(tplContent)(scope));
});
}
};
}])
ng-include も使用してみましたが、コンパイル前にスコープ変数を評価しません。CellTemplate の値はデータベース呼び出しから取得されるため、評価前にはまったく不明です。これを機能させるための提案は大歓迎です!
編集: angular 1.0.8 を使用していますが、新しいバージョンにアップグレードできません。