当提供的值将分配给指令范围时,指令范围不会刷新

时间:2014-04-15 18:38:51

标签: angularjs angularjs-directive

我在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
    }
  };
});
在主控制器中更改范围后, $ scope.xxx应该刷新。

1 个答案:

答案 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}}的内容不受影响。

我很好奇为什么你必须复制变量,而不仅仅是改变模板以使用传递给指令的模板。