我在angularjs中创建了自己的指令,我注意到当我在主控制器中更改范围时,指令范围不会刷新。
我做了一个简单的例子,它在3s更改范围值后,但指令中的值没有改变。仅当我将指令提供的值分配给指令范围时,问题才存在。
此处提供了整个示例:jsfiddle
我的指示:
myApp.directive('textPresenter', function() {
return {
transclude : false,
restrict: 'E',
scope: {
adfName : '='
},
template: '{{xxx}}' ,
controller: function($scope){
$scope.xxx = $scope.adfName; //this is the issue
}
};
});
在主控制器中更改范围后,答案 0 :(得分:1)
模板中的范围值adfName
与Angular中的主控制器中的范围值绑定,并在更改时更改。如果您将模板更改为:
template: '{{adfName}}'
在http://jsfiddle.net/6bp7c/1/中,您可以看到这一点。
但是,根据您的评论,您说您无法做到这一点。然后有一种可能性是在你的指令中设置观察者,观察adfName
,并在xxx
发生变化时将$scope.$watch('adfName', function(newAdfName) {
$scope.xxx = newAdfName;
});
设置为等于它:
$scope.xxx = $scope.adfName
可以在http://jsfiddle.net/7V9FV/看到。这是必要的,因为
adfName
只需复制xxx
的内容并将其放入adfName
。如果xxx
稍后更改,则{{1}}的内容不受影响。
我很好奇为什么你必须复制变量,而不仅仅是改变模板以使用传递给指令的模板。