2015-03-11 4 views
1

Я работаю с угловымJS, и у меня есть некоторые трудности с контроллерами.angularJS контроллеры и PDF

У меня есть одна страница на этой странице У меня есть два контроллера для получения данных из веб-службы и один для отображения данных на pdfViewer.

Моя идея - запустить второй контроллер после того, как первый контроллер получит данные, потому что теперь кажется, что два контроллера запускаются одновременно, поэтому ничего не отображается.

Вот мой код для просмотра:

var seeCv = angular.module('myApp', ['ngPDFViewer']); 
 
seeCv.controller('TestCtrl',function($http){ 
 
      
 
    $http.get('some url').success(function(data){ 
 
      datas = data; 
 
    }); 
 

 
      
 
}); 
 

 

 
seeCv.controller('VisuCvCtrl',['$scope','PDFViewerService',function($scope,pdf){ 
 
     
 
     $scope.pdfURL = datas; 
 

 
\t $scope.instance = pdf.Instance("viewer"); 
 
     
 
     $scope.nextPage = function(){ 
 
      $scope.instance.nextPage(); 
 
     }; 
 
     
 
     $scope.prevPage = function(){ 
 
      $scope.instance.prevPage(); 
 
     }; 
 
     
 
     $scope.pageLoaded = function(curPage, totalPages){ 
 
      $scope.currentPage = curPage; 
 
      $scope.totalPage = totalPages; 
 
     }; 
 
    
 
     
 
}]);
<div ng-controller="TestCtrl" > 
 
    <div class="container" ng-controller="VisuCvCtrl"> 
 
     <button ng-click="prevPage()">&lt;</button> 
 
     <button ng-click="nextPage()">&gt;</button> 
 
     <br> 
 
     <span>{{currentPage}}/{{totalPage}}</span> 
 
     <br> 
 
     <pdfviewer src="{{pdfURL}}" on-page-load='pageLoaded(page,total)' id="viewer"></pdfviewer> 
 
    </div> 
 
    </div>

PS: Я пытался сделать вызов веб-службы на втором контроллере, но там была ошибка с $ HTTP.

ответ

0

Каждый контроллер имеет свой собственный объем, вы пытаетесь достичь области testController из VisuCtrl, на самом деле вы пытаетесь использовать область контроллера родителя от дочернего контроллера. Вы можете сделать это следующим образом:

seeCv.controller('TestCtrl',function($http){ 

    $http.get('some url').success(function(data){ 
      datas = data; 
    });   
}); 



seeCv.controller('VisuCvCtrl',['$scope','PDFViewerService',function($scope,pdf){ 

     $scope.pdfURL = $scope.$parent.datas; 
     ... 

    }]); 

Во всяком случае, я предлагаю услуги, чтобы выборки данных (Таким образом, вы можете повторно использовать функцию службы Входит в других контроллерах, а). Контроллер будет использовать эту услугу, чтобы получить данные и поместить их в область, чтобы представление могло использовать эти данные.

+0

Я думаю, что не понимаю. В вашем примере у вас есть два варианта, но эти функции должны быть во втором контроллере, плюнуть или полностью в другом месте. –

+0

@Thomasgraveleine для реализации способа, которым вы пытались, вы должны получить данные в тестовом ctrl и получить его из VisuCtrl, используя «$ scope. $ Parent». Отредактировано ответ –

+0

Я достигаю своей цели по этой проблеме. На самом деле я получаю приложение типа данных/октет-поток, и мне просто нужно его разобрать, чтобы отобразить его с помощью pdfviewer, у кого есть ключ к этому? –

0

Я нашел способ сделать это в том же контроллере:

seeCv.controller('VisuCvCtrl',['$scope','$http','PDFViewerService',function($scope,$http,pdf){ 

    var promise = $http.get('some url').success(function(data){ 
     datas = data; 
    }); 

    promise.then( 
      function(display){ 
       $scope.pdfURL = datas; 

       $scope.instance = pdf.Instance("viewer"); 

       $scope.nextPage = function(){ 
        $scope.instance.nextPage(); 
       }; 

       $scope.prevPage = function(){ 
        $scope.instance.prevPage(); 
       }; 

       $scope.pageLoaded = function(curPage, totalPages){ 
        $scope.currentPage = curPage; 
        $scope.totalPage = totalPages; 
       }; 
      }); 

}]); 

Но дело в том, теперь у меня есть такая ошибка повторяющихся каждые 10 секунд.

ошибка: [$ интерполяция: interr] errors.angularjs.org/1.2.9/$interpolate/interr?p0=%7B%7BpdfURL%7D%7D...2500%2500%2500%2500%2500%2500% 2500% 2500% 2500% 2500% 2500% 2500% 2500% 2500% 2500 при ошибке (родной) на code.angularjs.org/1.2.9/angular.min.js:6:449 at Object. $ Get .s (https://code.angularjs.org/1.2.9/angular.min.js:73:497) at h.Bd. $ get.h. $ digest (code.angularjs.org/1.2.9/angular.min.js:100:171) at h.Bd. $ get.h. $ apply (code.angularjs.org/1.2.9/angular.min.js:103:100) в HTMLButtonElement. (code.angularjs.org/1.2.9/angular.min.js:179:65) на code.angularjs.org/1.2.9/angular.min.js:27:208 на q (code.angularjs. org/1.2.9/angular.min.js: 7: 380) в HTMLButtonElement.Zc.c (code.angularjs.org/1.2.9/angular.min.js:27:190) angular.js: 9419 (анонимная функция)

И я действительно не знаю, что это.

Смежные вопросы