Récupérer intérieure HTML de AngularJS directive avant le templateUrl la remplace

J'ai une directive-je utiliser pour la validation d'un formulaire standard qui j'ai récemment refait. Permettez-moi d'expliquer la directive, un peu plus loin avant de l'étendre.

La directive d'utilisation:

<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>

Précédemment, mon directive cherché quelque chose comme ça, et il travaillé.

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);

        }
    }
});

Le modèle html devenait compliqué, et je voulais terminer les boutons 'à l'intérieur du modèle, plutôt que d'après eux. J'ai donc refait dans ce que je pensais était un bien meilleur directive.

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(' ', '') === '')
};
}
};
}]);

Donc ce que je m'aperçois que element.html() récupère le contenu de la templateUrl au lieu de le contenu de l'intérieur HTML de mon directive. Sinon, comment puis-je obtenir le contenu de mon directive avant, il est remplacé par le templateUrl?

OriginalL'auteur francisco.preller | 2013-11-21

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *