2016-07-05 4 views
0

각도 컨트롤러에 객체 배열이 있습니다.각도 배열에 객체 배열 전달하기

[{ 
    label: 'label1', 
    data: [{ 
      type: TimelineChart.TYPE.POINT, 
      at: new Date([2015, 1, 1]) 
      }, { 
      type: TimelineChart.TYPE.POINT, 
      at: new Date([2015, 2, 1]) 
     }] 
}, { 
    label: 'label2', 
    data: [{ 
      type: TimelineChart.TYPE.POINT, 
      at: new Date([2015, 1, 11]) 
     }, { 
      type: TimelineChart.TYPE.POINT, 
      at: new Date([2015, 1, 15]) 
     }] 
}]; 

모든 개체에는 Date 필드가 있습니다. 이 객체 배열을 내 지시문에 어떻게 전달할 수 있습니까?

나는 참조로 전달하는 시도 :

<div id= "chart" my-directive my-data="data"></div> 
$scope: { 
      myData: '=' 
     }, 
link: function($scope, $element, $attrs) { 
     function init() { 
      var data = $scope.myData; 
      var timeline = new TimelineChart($element[0], data); 
     } 

     $attrs.$observe("myData", init); 
     } 

그러나, 그것은 작동하지 않았다. 나는 undefined을 얻는다.

my-data="{{ data }}"JSON.parse($attrs.myData)과 같은 속성으로 전달하는 경우 Date 필드로 인해 작동하지 않습니다.

+0

사용 $ 관찰 또는 더 나은 $ 시계 인수가 새로운 값이 정의되어 있는지 확인합니다. 또는 컨트롤러 또는 서비스에서 약속을 지킵시다. – charlietfl

+0

컨트롤러에서 잘 정의되어 있는지 확인할 수는 있지만, 어떤 이유로 든 내 지시문에서 '정의되지 않음'으로 표시됩니다. @charlietfl 또한, 이미'$ observe '를 사용하고 있습니다. – Tacocat

+0

그렇지만'$ observe'는 첫 번째 값으로 시작할 수 있습니다. 만약'$ http'를 사용하여 데이터를 생성하면 정의되지 않습니다. 인수를 사용하십시오. 또는 ... 라우팅을 사용하고 컨트롤러와 지시어가 실행되기 전에 모든 것이 준비되었는지 확인하십시오. – charlietfl

답변

-2

나는 당신의 배열 객체가 $ scope에서 손실된다고 생각합니다. 확인을 위해 console.log ($ scope.myData)를 사용하십시오.

브라우저 콘솔에서 반환되는 내용을 확인하고 정의되지 않은 경우 console.log ($ scope); 그런 다음 응용 프로그램을 실행하십시오. 브라우저 콘솔로 이동하여 myData 객체을 찾을 때까지 $ parent를 확장하십시오. 부모 범위의 수를 센다.

당신이 3 부모 아래에 그것을 발견한다고 가정하면, 사용

$ 범위. $ 부모. $ 부모. 대신 $ scope.myData의 $ parent.myData.

이 작동합니다 :)

0

그것은 directive에 데이터를 전달하는 것은 매우 간단합니다. 내가 누락 된 부분은 범위라고 생각합니다. scope 대신 $scope을 사용하고 있습니다. 지시문 정의 객체는 scope이 아니고 $scope이 아닙니다. 그래서 당신이 그것을해야합니다.

scope: { //make it scope 
      myData: '=' 
     }, 
link: function($scope, $element, $attrs) { 
     function init() { 
      var data = $scope.myData; 
      var timeline = new TimelineChart($element[0], data); 
     } 

     $attrs.$observe("myData", init); 
     } 

다음은 fiddle

+0

@Hitesh Kumar, 작동하지 않습니다. – Tacocat

+0

당신이 직면 한 도전. 나는 내가 데이터를 얻을 수 있다는 것을 알 수있는 바이올린을 만들었습니다. –

+0

나는 당신의 피들을 볼 수 없습니다. 실행 중이 지 않아 작동하는지 말할 수 없습니다. 하지만 코드에서 '범위'를 사용하여 전환하더라도 작동하지 않는다는 것을 알고 있습니다. – Tacocat