Ich habe eine Direktive, die ich für die Formvalidierung verwendet, die ich vor kurzem überarbeitet habe. Erlauben Sie mir, die Richtlinie ein wenig weiter zu erläutern, bevor ich sie erweitere.Rufen Sie das innere HTML der AngularJS-Direktive ab, bevor TemplateUrl es überschreibt
Die Richtlinie Nutzung:
<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>
Zuvor sah meine Richtlinie so etwas, und es arbeitete.
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-Template wurde immer chaotisch, und ich wollte, dass die Tasten ‚innen‘ der Vorlage wickeln, anstatt sie nach. Also überlegte ich, was ich für eine viel bessere Richtlinie hielt.
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(' ', '') === '')
};
}
};
}]);
Was ist also ich bemerken, dass element.html() nun den Inhalt des templateUrl ruft anstelle des Inhalts der inneren HTML meine Richtlinie. Wie sonst kann ich den Inhalt meiner Direktive abrufen, bevor sie von TemplateUrl überschrieben wird?
Dies tut genau das, was Sie sagen, und ist die richtige Antwort, wenn auch als ein Follow-up - Bindung des übergebenen HTML-Code in Die templateUrl über ng-bind-html mit $ sce.trustAsHtml() verfälscht die Click-Events, die mit dem Scope übergeben werden. Liegt dies an der Anwesenheit eines neuen Verantwortlichen in der Richtlinie? –
nicht sicher, way, dass Sie das verwenden, um ehrlich zu sein ... einfach die HTML-Eingabe aus dem Geltungsbereich wird nicht kompiliert werden. Erstellen Sie eine Demo. Alles in allem bin ich ein wenig verwirrt über das, was Sie tun .... nur gab Ihnen eine Möglichkeit, auf den HTML-Code zugreifen, wie gewünscht. Du kannst plocker verwenden, um die templateURL zu importieren ... einfach eine Datei mit dem html darin erstellen und die URL auf das gleiche Verzeichnis (nur Datei) einstellen. – charlietfl
Danke, wir werden es ein bisschen länger hacken. Und werde ein Update veröffentlichen, wenn ich herausfinden werde, was das Problem ist. Wahrscheinlich etwas mit meinem Code zu tun. Wie ich schon sagte, dies ist die richtige Antwort auf die eigentliche Frage, egal, danke! –