Шаблон всегда компилируется со старым значением области в директиве
У меня есть директива, которая работает так:
http://jsfiddle.net/smithkl42/cwrgLd0L/23/
App.directive('prettify', ['$compile', function ($compile) {
var templateFn;
return {
restrict: 'E',
scope: {
target: '='
},
link: function (scope, element, attrs) {
if (!templateFn) {
var template = element.html();
templateFn = $compile(template);
}
scope.$watch('target', function (newVal, oldVal) {
var compiled = templateFn(scope);
element.html('');
element.append(compiled);
var html = element.html();
var prettified = prettyPrintOne(html);
element.html(prettified);
}, true);
}
};
}]);
Проблема в том, что когда я компилирую шаблон, он всегда компилируется сстарый значениеtarget
имущество. Таким образом, он начинает показывать это, то есть действует так, что заменить нечего:
Затем, если я добавлю символ к свойству, он показывает это, то естьпредыдущий значениеscope.organization.message
имущество:
Отладка показывает, что значения вtarget
свойства директивы области видимости верны на момент компиляции.
Что я делаю неправильно? Есть ли что-то в функции шаблона, возвращаемой$compile
что смотрит на старые значения области? Или же...?
(Смотрите также этот вопрос, который привел к этому:Использование $ compile в директиве запускает бесконечную ошибку дайджеста AngularJS.)