Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 当提供的值将分配给指令范围时,指令范围不刷新_Angularjs_Angularjs Directive - Fatal编程技术网

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

Angularjs 当提供的值将分配给指令范围时,指令范围不刷新,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在angularjs中创建了自己的指令,我注意到当我在主控制器中更改范围时,指令范围并没有刷新 我做了一个简单的例子,在3s后改变范围值,但指令中的值没有改变。只有将指令提供的值指定给指令范围时,问题才会存在 此处提供了完整的示例: 我的指示: myApp.directive('textPresenter', function() { return { transclude : false, restrict: 'E', scope:

我在angularjs中创建了自己的指令,我注意到当我在主控制器中更改范围时,指令范围并没有刷新

我做了一个简单的例子,在3s后改变范围值,但指令中的值没有改变。只有将指令提供的值指定给指令范围时,问题才会存在

此处提供了完整的示例:

我的指示:

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应刷新

模板中的范围值
adfName
通过角度绑定到主控制器中的范围值,并且在该范围值更改时会更改。如果将模板更改为:

template: '{{adfName}}'
如中所示,那么您可以看到这一点

然而,从你的评论来看,你说你不能这样做。然后,一种可能是在指令中设置一个观察者,观察
adfName
,并在其变化时将
xxx
设置为与之相等:

$scope.$watch('adfName', function(newAdfName) {
  $scope.xxx = newAdfName;      
});
正如可以在上一页看到的那样。这是必要的,因为

$scope.xxx = $scope.adfName
只需复制
adfName
的内容并将其放入
xxx
。如果以后更改了
adfName
,则
xxx
的内容不受影响


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

你不能简化并像这样编写吗?我不能。我根据发现这个bug的现有angularjs框架制作了一个示例。为什么要更新
xxx
?给它赋值一次。就是这样。是的,我知道,但是每次adfName发生变化时,我应该添加什么代码来更新它。谢谢$watch正常工作。正如我在评论中所说,我使用ready框架(angular dashboard框架),作者编写了该代码。我可以更改模板,但出于好奇我问了