私が最近リファクタリングしたフォーム検証用定型句に使用するディレクティブがあります。拡大する前に指示をもう少し説明することができます。templateUrlが上書きする前にAngularJSディレクティブの内部HTMLを取得
ディレクティブの使用:
<form class="form-horizontal" name="personalDetails" validated-form>
<!-- Pass buttons into form through here -->
<a href="" class="btn btn-success"
data-ng-click="saveDetails()"
data-ng-disabled="!personalDetails.$valid">Save Changes</a>
</form>
は以前、私のディレクティブは、このような何かを見て、それはを働きました。
app.directive('validatedForm', function($compile, $sce) {
return {
restrict: 'A',
scope: true,
link: function(scope, element, attrs) {
var template = //... HTML boilerplate code
var buttons = element.html(); // Get contents of element before overriding
element.html(template + buttons);
$compile(element.contents())(scope);
}
}
});
htmlテンプレートが乱雑になり、テンプレートの内側にあるボタンをラップしたいと思いました。だから、私はもっと良い指示であると思ったものにリファクタリングしました。
app.directive('validatedForm', ['$compile', '$sce', function ($compile, $sce) {
var domContent = null;
return {
restrict: 'AE',
scope: true,
templateUrl: '/Content/ngViews/directives/validated-form.html',
link: function(scope, element, attrs) {
// This now returns the contents of templateUrl
// instead of what the directive had as inner HTML
domContent = element.html();
// Scope
scope.form = {
caption: attrs.caption,
location: 'Content/ngViews/forms/' + attrs.name + '.html',
buttons: $sce.trustAsHtml(domContent),
showButtons: !(domContent.replace(' ', '') === '')
};
}
};
}]);
それでは、私は気づいてることelement.htmlは()今templateUrlの内容の代わりに、私の指示の内側のHTMLの内容を取得することです。 templateUrlによって上書きされる前に、私のディレクティブの内容をどのように取得できますか?
を使用して想定して、以前のバージョンからのわずかな変化であります$ sce.trustAsHtml()を使用するng-bind-htmlによるtemplateUrlは、スコープで渡されるクリックイベントを混乱させます。これは指令の中に新しいコントローラが存在するためですか? –
正直言ってそれを使用しているのかどうかわからない...単にhtmlをスコープから渡すだけではコンパイルされません。デモを作成します。全体的にあなたは何をしているのかちょっと混乱しています....ちょうどあなたが要求どおりにHTMLにアクセスする方法を教えました。 plunkerを使用してtemplateURLをインポートすることができます。ちょうどhtmlを含むファイルを作成し、同じディレクトリ(URLのみ)に調整します – charlietfl
ありがとうございます。問題が何であるかを知ると、アップデートを投稿します。おそらく私のコードと関係があります。私が言ったように、これは関係なく、本当の質問への正しい答えです、ありがとう! –