angularJS控制器和PDF

angularJS控制器和PDF,angularjs,pdf,controller,Angularjs,Pdf,Controller,我和angularJS一起工作,在控制器方面有一些困难 我有一个页面在这个页面上我有两个控制器一个从web服务接收数据,一个在pdfViewer上显示数据 我的想法是在第一个控制器接收到数据后启动第二个控制器,因为现在两个控制器似乎同时启动,所以没有显示任何内容 下面是我的视图代码: var seeCv=angular.module('myApp',['ngPDFViewer']); 参见CV.controller('TestCtrl',函数($http){ $http.get('someUR

我和angularJS一起工作,在控制器方面有一些困难

我有一个页面在这个页面上我有两个控制器一个从web服务接收数据,一个在pdfViewer上显示数据

我的想法是在第一个控制器接收到数据后启动第二个控制器,因为现在两个控制器似乎同时启动,所以没有显示任何内容

下面是我的视图代码:

var seeCv=angular.module('myApp',['ngPDFViewer']);
参见CV.controller('TestCtrl',函数($http){
$http.get('someURL').success(函数(数据){
数据=数据;
});
});
参见CV.controller('VisuCvCtrl',['$scope','PDFViewerService',函数($scope,pdf){
$scope.pdfURL=数据;
$scope.instance=pdf.instance(“查看器”);
$scope.nextPage=函数(){
$scope.instance.nextPage();
};
$scope.prevPage=函数(){
$scope.instance.prevPage();
};
$scope.pageLoaded=函数(curPage,totalPages){
$scope.currentPage=curPage;
$scope.totalPage=totalPages;
};
}]);


{{currentPage}/{{totalPage}

每个控制器都有自己的作用域,您试图从VisucCtrl访问testController作用域,实际上您试图从子控制器使用父控制器作用域。您可以这样做:

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;
      ...

    }]);
无论如何,我建议使用一个服务来获取数据(这样您也可以在其他控制器中重用service get函数)。
控制器将使用该服务获取数据并将其置于作用域中,以便视图可以使用该数据。

我找到了在同一控制器中执行此操作的方法:

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秒就重复一次这样的错误

错误:[$interpolate:interr]errors.angularjs.org/1.2.9/$interpolate/interr?p0=%7B%7pdfurl%7D%7D…2500%2500%2500%2500%2500%2500%2500%2500%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() 在h.Bd.$get.h.$digest(code.angularjs.org/1.2.9/angular.min.js:100:171) 在h.Bd.$get.h.$apply(code.angularjs.org/1.2.9/angular.min.js:103:100) 在HTMLButtoneElement。(代码: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 (匿名函数)


我真的不知道那是什么

我想我不明白。在您的示例中,您有两个函数,但这些函数必须位于第二个控制器、spit或完全位于其他任何位置。@ThomasGraveline为了实现您尝试的方式,您应该在test ctrl中获取数据,并使用“$scope.$parent”从VisuCtrl访问数据。我在这个问题上达成了我的目标。实际上,我接收到数据类型application/octet流,我只需要解析它,以便用pdfviewer显示它。有人有这样做的线索吗?