Ich habe versucht, eine kleine Direktive zu schreiben, um ihren Inhalt mit einer anderen Vorlagendatei zu versehen.
Dieser Code:
<layout name="Default">My cool content</layout>
Sollte diese Ausgabe haben:
<div class="layoutDefault">My cool content</div>
Weil das Layout "Standard" diesen Code hat:
<div class="layoutDefault">{{content}}</div>
Hier der Code der Richtlinie:
app.directive('layout', function($http, $compile){
return {
restrict: 'E',
link: function(scope, element, attributes) {
var layoutName = (angular.isDefined(attributes.name)) ? attributes.name : 'Default';
$http.get(scope.constants.pathLayouts + layoutName + '.html')
.success(function(layout){
var regexp = /^([\s\S]*?){{content}}([\s\S]*)$/g;
var result = regexp.exec(layout);
var templateWithLayout = result[1] + element.html() + result[2];
element.html($compile(templateWithLayout)(scope));
});
}
}
});
Mein Problem:
Wenn ich Bereichsvariablen in der Vorlage verwende (in der Layoutvorlage oder innerhalb des Layout-Tags), z. {{whatever}}
es funktioniert nur anfangs. Wenn ich die whatever
Variable aktualisiere, wird die Direktive nicht mehr aktualisiert. Die gesamte Link-Funktion wird nur einmal ausgelöst.
Ich denke, dass AngularJS nicht weiß, dass diese Direktive Bereichsvariablen verwendet und daher nicht aktualisiert wird. Aber ich habe keine Ahnung, wie ich dieses Verhalten beheben kann.
$compile
) die Uhr nicht automatisch eingerichtet wird. Wie Sie sagen, ist es zunächst gebunden ...