AngularJS指令在作用域变量更改时不会更新。

23 浏览
0 Comments

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不知道这个指令使用了作用域变量,因此它不会被更新。但我不知道如何修复这种行为。

0