Я получил директиву, которая работает следующим образом:Шаблон всегда компилируется со старым значением области видимости в директиве
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
, которая просматривает старые значения области? Или...?
(Смотрите также на этот вопрос, который привел к этому:. Using $compile in a directive triggers AngularJS infinite digest error)
Спасибо! Очень хорошее объяснение. Вот рабочий jsfiddle: http://jsfiddle.net/smithkl42/cwrgLd0L/27/. –