2013-02-19 4 views
0

D3 및 각도로 어떤 작업을 시도하고있었습니다. 나는 이것이 D3과 관련이 있다는 것을 확신하지 못한다. 단지 거기에 남겨 두었 기 때문에 내가 시도한 모든 것을 재현 할 수있다 ..분리 범위가있는 지시문에서 발사하지 않음

다음은 나의 문제를 재현하는 plunk이다.

http://plnkr.co/edit/sxbKUmeb1B51t9eTtgwH?p=preview

입니다 내가 무엇을 시도하고, 데이터 배열을 생성하고 그 데이터를 기반으로 D3의 SVG 원 세트를 생산하고 있습니다. 생성 된 지시문은이 데이터 배열을 "감시"하고 축소 또는 확장하는 배열을 기반으로 더 많은 원을 만들거나 삭제해야합니다. 논리가 꽤 간단하다는 점을 생각합니다. 나중에이 작업을 수행하기 위해 $ timeout을 사용하여 배열에 새로운 값을 추가하고 있습니다.

답변

1

음, 첫째,이 코드 : 당신이 당신의 범위 obj의 아무 곳이나 dataArray를 정의하지 않기 때문에 <circles data="obj.dataArray"></circles> 잘못된 것 같습니다.

그래서이 :

function($scope,model,$timeout) { 
    $scope.obj = {}; 
     model.data[0] = 20; 
     model.data[1] = 30; 
     model.data[2] = 40; 
     model.data[3] = 50; 

     $timeout(function(){ 

      model.data.push(Math.random()*100); 
      console.log(model.data); 
     },1000); 
} 

아마이 같은 몇 가지를해야합니다

function($scope,model,$timeout) { 
    $scope.model = model; 
    $scope.model.data[0] = 20; 
    $scope.model.data[1] = 30; 
    $scope.model.data[2] = 40; 
    $scope.model.data[3] = 50; 

    $timeout(function(){ 
     $scope.model.data.push(Math.random()*100); 
     console.log($scope.model.data); 
    },1000); 
} 

그리고이 : <circles data="obj.dataArray"></circles><circles data="model"></circles>을해야합니다. 당신의 지시에 지금

, 당신은 다음과 같이 범위를 설정 한 :

scope : { 
    data : '&' 
}, 

그러나 그것은해야한다 :

scope : { 
    data : '=' 
}, 

하면 데이터가 나타내는 개체에 대한 참조를 원하기 때문에 속성. &은 속성에 실행하려는 표현식이 포함되어있는 경우에 사용됩니다.

이러한 변경 사항으로 인해 지침의 scope.data에 "commonModel"에 대한 참조가 포함되어 있으므로 해당 명령에서 "commonModel"을 요청할 필요가 없습니다. 그런 다음 $ watch를 변경하여 "data.length"를 보아 항목이 언제 추가되거나 제거되었는지 알 수 있습니다. 이 같은

뭔가 : http://plnkr.co/edit/sa9blROCm8FFhRQSEWii

+0

최고, 감사합니다 ... 당신은 앞서 언급 한 것들 중 일부 내 다른 시도에서 "유적"실제로이었다. 나는 처음에 컨트롤러의 스코프 오브젝트를 시도해 보았다. http://plnkr.co/edit/Y0n0MlwtwYTnWt5S3wd1?p=preview, dint dint work, 그 다음에 나는 (당신이 보았던) 서비스로 시도했다. 심지어 그것이 작동하지 않았다 !! 그 object (scope.data 대신에 scope.obj.data)에 대한 참조를 시도했는데 그 도움도 도움이됩니다. – ganaraj

+0

이것은 scope.data를 보지 않고 실제로 scope.data.length를보고있는 것을 고정시킨 것처럼 보입니다 ... 왜 객체 자체가 나던지를 보면서 길이를 보는 것이 왜 명확하지 않은지 !!! 어쩌면 나는 deepwatch를 true로 설정해야한다. good ... 그래도 .. 고맙습니다. – ganaraj

+0

시계 표현은 모든 다이제스트에 대해 실행되기 때문에되도록 빨리해야합니다. 그렇다면 data.length를 관찰하는 것이 좋습니다. 요소 추가/제거시기를 아는 데에만 관심이 있습니다. 전체 데이터 구조에 대한 감시가 정말로 필요한 경우 $ watch에 대한 세 번째 인수로 "true"를 전달할 수 있습니다.이 값을 설정하면 참조가 아닌 값으로보고하도록 Angular에 지시합니다. 하지만 성능 페널티가 있기 때문에 두 번 생각하십시오. –

관련 문제