【发布时间】:2014-12-16 18:16:16
【问题描述】:
我有一个像这样工作的指令:
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 属性的old 值进行编译。所以它开始显示这一点,即,它表现得好像没有什么可以替代:
然后,如果我向属性添加一个字符,它会显示这个,即scope.organization.message 属性的 previous 值:
调试显示范围指令的target 属性中的值在编译时是正确的。
我做错了什么? $compile 返回的模板函数是否有一些查看旧范围值的内容?还是……?
(另请参阅这个问题,它导致了这个问题:Using $compile in a directive triggers AngularJS infinite digest error。)
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope