AngularJS指令在作用域变量更改时不会更新。
AngularJS指令在作用域变量更改时不会更新。
我尝试编写一个小指令,用于将其内容包装在另一个模板文件中。
这段代码:
应该有这个输出:
我的酷炫内容
因为布局“Default”有这段代码:
{{content}}
以下是指令的代码:
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));
});
}
}
});
我的问题是:
当我在模板中使用范围变量(在布局模板中或布局标签内部),例如{{whatever}},它只能在最初工作。如果我更新了变量whatever,指令将不再更新。整个link函数只会触发一次。
我认为,AngularJS不知道这个指令使用了作用域变量,因此它不会被更新。但我不知道如何修复这种行为。