私はスコープ変数を介してテンプレートのURLを渡そうとしています。スコープは変更されないので、テンプレートはそれに基づいて更新する必要はありませんが、現在はスコープ変数は常に定義されていません。属性のスコープ変数経由でtemplateUrlを渡す方法
<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の値はデータベース呼び出しから取得されるため、評価前に完全に不明です。この作業を行うための提案は非常に高く評価されます!
編集: 角度1.0.8を使用しており、新しいバージョンにアップグレードできません。
データがあらかじめ定義されている場合は間違いなく機能します。私は自分のデータがサービスから取得されているため、私の問題は認識していませんでした。タイムアウトでデータを設定すると、スタックされてしまいます。 http://plnkr.co/edit/aLkCRm – John
Johnについて誤解をおかけして申し訳ありません。私は、更新されたコードとタイムアウトで動作する新しいPlunkerで私の答えを編集しました。 – tasseKATT
それはトリックでした!ありがとうございました – John