단일 컨트롤러에서 각도 여러 동일한 지시문

ShadowFlame

일부 데이터를 시각화하기 위해 Highcharts를 사용하는 웹 페이지를 만들고 있습니다. 재사용 할 수 있도록 지시문에 원하는 차트를 래핑했습니다.

'use strict';
angular.module('statisticsApp')
  .directive('cleanbarchart', function () {
    scope:{
      localdata:'@'
    }
    return {
      template: '<div></div>',
      restrict: 'E',
      link: function postLink(scope, element, iAttrs) {
          // console.log(iAttrs);
          // console.log(iAttrs);
          // var attrs = JSON.parse(iAttrs.id);
          var attrs = iAttrs;
          element.highcharts({
            chart: {
              type: 'column',
              width:1000,
              zoomType: 'x'
            },
            title: {
              text: scope.localdata[attrs.id].title //title
            },
            xAxis: {
              categories: scope.localdata[attrs.id].categories, crosshair: true

            },
            yAxis: {
              min: 0
            },
            tooltip: {
  //            headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
  //            pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
  //            '<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>',
  //            footerFormat: '</table>',
  //            shared: true,
  //            useHTML: true
            },
            plotOptions: {
  //            column: {
  //            pointPadding: 0.2,
  //            borderWidth: 0
  //          }
            },

            series: scope.localdata[attrs.id].series
          })
      }
    };
  });

내 컨트롤러에서 서비스와 콜백 함수를 사용하여 localdata를 채 웁니다.

angular.module('statisticsApp')
  .controller('AboutCtrl', function ($scope, HttpDataService) {

     function done(data){

       console.log(data);
       $scope.localdata['test2'] = data; //HttpDataService.getUniqueUsers() ;
     }

     $scope.localdata = {} ;
     HttpDataService.getUniqueUsers(done) ;
});

다음과 같은 서비스로 :

angular.module('statisticsApp')
  .service('HttpDataService', function($http, $q, baseRestPath) {
    // AngularJS will instantiate a singleton by calling "new" on this function
    return {
      getUniqueUsers: function (callback, periodicity) {
        var url = baseRestPath + '/sessions/uniqueUsers';
        console.log(url);
        var dates = [];
        var values = [];

        $http.get(url).then(
          function successCallback(response){
            var data = response.data;
            data.forEach(function(dataLine) {
              dates.push(dataLine[1]);
              values.push(dataLine[0]);
            })
            console.log(values);
            callback({title: 'Unique Users', categories:dates, 'series': [ {name: 'Alltime', data:values} ]  });
        //    return {'title': "Unique Users", 'categories':dates, 'series': [ {name: "Alltime", data:values} ]  }
          },function errorCallBack(response){
            //do nothing
          }
        );


//      return {'title': "Unique Users", 'categories':dates, 'series': [ {name: "Alltime", data:values} ]  }
      }
    }
  });

마지막으로 내 HTML에서 다음 코드를 사용하여 지시문을 호출합니다.

<cleanbarchart id="test2"></cleanbarchart>

내 서비스가 작동하고 데이터를 올바르게 반환한다고 확신하지만 오류가 발생합니다.

정의되지 않은 '제목'속성을 읽을 수 없습니다.

$ http가 작동하는 비동기 방식과 관련이 있다고 생각하지만 요소를 래핑하여 시도한 scope.localdata 또는 scope.localdata [attrs.id]에서 지시문을 감시하는 방법을 알 수 없습니다. 감시 블록의 .highcharts

link: function postLink(scope, element, iAttrs) {
  scope.$watch('localdata',function(){
    element.highcharts.....
  }
}

or 

link: function postLink(scope, element, iAttrs) {
  scope.$watch('localdata[' + attrs.id + ']',function(){
    element.highcharts.....
  }
}

모든 도움을 주셔서 감사합니다.

도마 스 마르

먼저 서비스에 콜백을 전달하는 대신 프라 미스를 반환하도록 서비스를 변경해야합니다. 를 열 경우 $http 문서 당신은 볼 $http.get반환 HttpPromise 나중에 해결할 수 있습니다 개체를.

그런 다음 데이터 대신 지시문에 promise를 전달할 수 있습니다.

그래서 대신 :

$scope.localdata = {} ;
HttpDataService.getUniqueUsers(done) ;

로 변경:

$scope.localdataPromise = HttpDataService.getUniqueUsers();

그리고 나중에 지시문에서 다음과 같이 해결하십시오.

scope.localdataPromise.then(function (data) { /* resolve data and draw chart */ });

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 컨트롤러에 대한 클릭 유도 문안

분류에서Dev

동일한 페이지에서 컨트롤러에 대한 여러 호출

분류에서Dev

컨트롤러에서 지시문까지 각도 이동 범위 변수

분류에서Dev

동일한 PC에 여러 스토리지 컨트롤러

분류에서Dev

각도 지시문에 동적 컨트롤러 전달

분류에서Dev

AngularJS : 동일한 지시문 컨트롤러에서 지시문 범위에 어떻게 액세스합니까?

분류에서Dev

각도 js : NG-STYLE 지시문을 사용하는 단일 속성에 대한 여러 조건

분류에서Dev

동일한 컨트롤러에서 컨트롤러 작업에 대한 ASP.NET MVC 게시

분류에서Dev

각도 지시문에서 컨트롤러 범위보기

분류에서Dev

각도 컨트롤러에서 지시문 만들기

분류에서Dev

동일한 각도 컨트롤러를 사용하는 두 번째보기에서 범위 변수가 인식되지 않습니다.

분류에서Dev

하나의 Angular 컨트롤러이지만 각 메서드는 별도의 파일 안에 있습니다.

분류에서Dev

$ state를 사용하여 컨트롤러에 대한 단위 테스트 시도

분류에서Dev

AngularJS는 단일 HTML 파일에서 여러 컨트롤러를 인식하지 못합니다.

분류에서Dev

하나의 컨트롤러를 통해 다른 뷰에서 동일한 지시문을 호출하는 방법

분류에서Dev

지시어 컨트롤러에서 각도 호출 컨트롤러 함수

분류에서Dev

단일 페이지로드 중에 컨트롤러가 여러 번 삽입 됨

분류에서Dev

단일 시각적 상태에 대한 여러 VisualState 트리거

분류에서Dev

단일 컨트롤러에서 여러 항목을 처리 하시겠습니까? AngularJS

분류에서Dev

활동 / 조각에서 여러 일시 중단 함수 호출

분류에서Dev

각도 지시문 액세스 컨트롤러-이상한 'ungoogled'메시지

분류에서Dev

각도 js에서 작동하지 않는 모델 컨트롤러

분류에서Dev

MVC 컨트롤러에서 동일한 저장 프로 시저 사용

분류에서Dev

병렬 창에서 뷰 컨트롤러 표시 (동일한 부모 포함)

분류에서Dev

동일한 컨트롤러 기능에 대한 여러 경로

분류에서Dev

동일한 페이지에서 두 개의 컨트롤러 사용

분류에서Dev

단일 양식에서 여러 컨테이너간에 컨트롤 이동

분류에서Dev

AngularJS-여러 컨트롤러에 대한 단일 경고 div

분류에서Dev

angularjs는 컨트롤러를 복제 / 여러 지점에 동일한 데이터 표시

Related 관련 기사

  1. 1

    동일한 컨트롤러에 대한 클릭 유도 문안

  2. 2

    동일한 페이지에서 컨트롤러에 대한 여러 호출

  3. 3

    컨트롤러에서 지시문까지 각도 이동 범위 변수

  4. 4

    동일한 PC에 여러 스토리지 컨트롤러

  5. 5

    각도 지시문에 동적 컨트롤러 전달

  6. 6

    AngularJS : 동일한 지시문 컨트롤러에서 지시문 범위에 어떻게 액세스합니까?

  7. 7

    각도 js : NG-STYLE 지시문을 사용하는 단일 속성에 대한 여러 조건

  8. 8

    동일한 컨트롤러에서 컨트롤러 작업에 대한 ASP.NET MVC 게시

  9. 9

    각도 지시문에서 컨트롤러 범위보기

  10. 10

    각도 컨트롤러에서 지시문 만들기

  11. 11

    동일한 각도 컨트롤러를 사용하는 두 번째보기에서 범위 변수가 인식되지 않습니다.

  12. 12

    하나의 Angular 컨트롤러이지만 각 메서드는 별도의 파일 안에 있습니다.

  13. 13

    $ state를 사용하여 컨트롤러에 대한 단위 테스트 시도

  14. 14

    AngularJS는 단일 HTML 파일에서 여러 컨트롤러를 인식하지 못합니다.

  15. 15

    하나의 컨트롤러를 통해 다른 뷰에서 동일한 지시문을 호출하는 방법

  16. 16

    지시어 컨트롤러에서 각도 호출 컨트롤러 함수

  17. 17

    단일 페이지로드 중에 컨트롤러가 여러 번 삽입 됨

  18. 18

    단일 시각적 상태에 대한 여러 VisualState 트리거

  19. 19

    단일 컨트롤러에서 여러 항목을 처리 하시겠습니까? AngularJS

  20. 20

    활동 / 조각에서 여러 일시 중단 함수 호출

  21. 21

    각도 지시문 액세스 컨트롤러-이상한 'ungoogled'메시지

  22. 22

    각도 js에서 작동하지 않는 모델 컨트롤러

  23. 23

    MVC 컨트롤러에서 동일한 저장 프로 시저 사용

  24. 24

    병렬 창에서 뷰 컨트롤러 표시 (동일한 부모 포함)

  25. 25

    동일한 컨트롤러 기능에 대한 여러 경로

  26. 26

    동일한 페이지에서 두 개의 컨트롤러 사용

  27. 27

    단일 양식에서 여러 컨테이너간에 컨트롤 이동

  28. 28

    AngularJS-여러 컨트롤러에 대한 단일 경고 div

  29. 29

    angularjs는 컨트롤러를 복제 / 여러 지점에 동일한 데이터 표시

뜨겁다태그

보관