私はより具体的な答えを提供できるように、ここに光を当てることができますか?
更新
と仮定すると、あなたのデータは、サービスから来ている:
.factory('myDataService', function() {
return function() {
// obviously would be $http
return [ "Apple", "Banana", "Orange" ];
};
});
そして、あなたのテンプレートは
.factory('myTplService', function() {
return function() {
// obviously would be $http
return '<div><p ng-repeat="item in items">{{item}}</p></div>';
};
});
が次にあなたが読み込み、単純な指示を作成
サービスから来ていますコンパイルしてディスプレイに追加します。 0123あなたのビューから.directive('showData', function ($compile) {
return {
scope: true,
link: function (scope, element, attrs) {
var el;
attrs.$observe('template', function (tpl) {
if (angular.isDefined(tpl)) {
// compile the provided template against the current scope
el = $compile(tpl)(scope);
// stupid way of emptying the element
element.html("");
// add the template content
element.append(el);
}
});
}
};
});
その後:
<div ng-controller="MyCtrl">
<button ng-click="showContent()">Show the Content</button>
<div show-data template="{{template}}"></div>
</div>
とコントローラで、あなたは、単にそれを結びつける:
.controller('MyCtrl', function ($scope, myDataService, myTplService) {
$scope.showContent = function() {
$scope.items = myDataService(); // <- should be communicated to directive better
$scope.template = myTplService();
};
});
をそしてそれはすべて一緒に動作するはずです!
PS:これはあなたのテンプレートがサーバーから来たものとみなされます。そうでない場合は、テンプレートがディレクティブに含まれている必要があります。
なぜコントローラからHTMLを生成していますか? –
これをすべて手に入れましたか? –
この問題の私の使用例:Angularスコープの変更に反応するいくつかのコントロールを挿入するサードパーティのライブラリ(リーフレット)を使用しています。私はバニラDOM APIを使って要素を作成し、 '$ scope。$ observe'を使って要素を作成することを避けたいと思います。これは基本的には通常のイベントリスナを登録するのと同じことです。 – fredrikekelund