Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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/1/oracle/9.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
Javascript ng嵌套数据更改后重复不更新_Javascript_Angularjs_D3.js_Angularjs Directive_Angularjs Ng Repeat - Fatal编程技术网

Javascript ng嵌套数据更改后重复不更新

Javascript ng嵌套数据更改后重复不更新,javascript,angularjs,d3.js,angularjs-directive,angularjs-ng-repeat,Javascript,Angularjs,D3.js,Angularjs Directive,Angularjs Ng Repeat,我有一个指令,它使用d3.js绘制一些东西,如果我绘制它,它是什么取决于我范围内的数据。我的问题是,我无法让它在更改后重新绘制内容,我尝试了使用$scope.$apply的变体,但迄今为止还没有成功 HTML: 下面是一个出现问题的plunker:?将指令更改为: app.directive('draw', function() { return { scope: { value: "=" //<--- }, link: function

我有一个指令,它使用d3.js绘制一些东西,如果我绘制它,它是什么取决于我范围内的数据。我的问题是,我无法让它在更改后重新绘制内容,我尝试了使用$scope.$apply的变体,但迄今为止还没有成功

HTML:


下面是一个出现问题的plunker:?

将指令更改为:

 app.directive('draw', function() {
    return {
       scope: {
       value: "=" //<---
    },
  link: function (scope, element, attrs){
     scope.$watch("value", function(val) {
        //draw stuff with val
     });
  }
}
app.directive('draw',function(){
返回{
范围:{

值:“=”//attrs.value!=0将此更改为attrs.value!==0;js文件1中还有两个其他javascript警告。for(key in$scope.data)应为for(var key in$scope.data)如果我将其更改为!==它将为0绘制一个圆,我希望它为所有不是0的值绘制一个圆。谢谢!现在我的问题是,如果已经有圆,它将绘制另一个圆,但这是另一个问题:)是的,您需要使用d3更新数据,或者只是清理并再次绘制
var app = angular.module('App', []);
app.controller('Mainctrl', function ($scope, $timeout) {
  $scope.data = 
  [{avg: 0},
  {avg: 1}];

  $timeout(function (){
    var i = 1;
      for (key in $scope.data){
         $scope.data[key].avg = i++; 
      };
    }
    ,3000)
  });

  app.directive('draw', function() {
    return {
      scope: {
        value: "@"
    },
    link: function (scope, element, attrs){
      if (attrs.value != 0) {
      var svgContainer = d3.select(element[0]).append("svg").attr("width", 200).attr("height", 200);
      var circle = svgContainer.append("circle").attr("cx", 30).attr("cy", 30).attr("r", 20);
      }
    }
  }

 });
 app.directive('draw', function() {
    return {
       scope: {
       value: "=" //<---
    },
  link: function (scope, element, attrs){
     scope.$watch("value", function(val) {
        //draw stuff with val
     });
  }
}
<body ng-app="App" ng-controller="Mainctrl">
   <div ng-repeat="val in data">
     <div draw value="val.avg">{{val.avg}}</div>
  </div>
</body>