簡體   English   中英

將參數從控制器傳遞到angularjs中的服務

[英]Pass parameter from controller to services in angularjs

我如何讓一項服務或工廠從許多控制器接收兩個參數?

一個參數用於url,另一個參數用於存儲在文件系統上的文件名。

我將有許多使用此服務的控制器,每個控制器傳遞自己的url和讀取該url並生成pdf的文件名。

我將始終存儲最后下載的pdf,並提供一個“打開最后一個pdf”按鈕,該按鈕將使用name參數。

我將有一個來自網址的“生成新的pdf”按鈕。

我確實遵循了本教程https://blog.nraboy.com/2014/09/manage-files-in-android-and-ios-using-ionicframework/,並且一切正常。

我正在使用cordova文件傳輸和inappbrowser cordova插件


這些部分將接收參數:

dirEntry.getFile(“ pdf-number-1.pdf”,

ft.download(encodeURI(“ http://www.someservice.com ”),p,


我的嘗試總是觸發消息unknow pdfService provider

我想念角度的概念嗎? 我該如何解決?

在services.js中,我有:


.service('pdfService', function($scope, $ionicLoading){

if( window.cordova && window.cordova.InAppBrowser ){
    window.open = window.cordova.InAppBrowser.open;
    console.log("InAppBrowser available");
  } else {
    console.log("InAppBrowser not available");
  }

  this.download = function() {
    $ionicLoading.show({
      template: 'Loading...'
    });
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
      fs.root.getDirectory("ExampleProject",{create: true},
          function(dirEntry) {
                dirEntry.getFile(
                    "pdf-number-1.pdf", 
                    {
                        create: true, 
                        exclusive: false
                    }, 
                    function gotFileEntry(fe) {
                        var p = fe.toURL();
                        fe.remove();
                        ft = new FileTransfer();
                        ft.download(
                            encodeURI("http://www.someservice.com"),
                            p,
                            function(entry) {
                                $ionicLoading.hide();
                                $scope.imgFile = entry.toURL();
                            },
                            function(error) {
                                $ionicLoading.hide();
                                alert("Download Error Source -> " + error.source);
                            },
                            false,
                            null
                        );                        
                    }, 
                    function() {
                        $ionicLoading.hide();
                        console.log("Get file failed");
                    }
                );
            }
        );
    },
    function() {
        $ionicLoading.hide();
        console.log("Request for filesystem failed");
    });
  }

    this.load = function() {
      $ionicLoading.show({
        template: 'Loading...'
      });

      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
          fs.root.getDirectory(
              "ExampleProject",
              {
                  create: false
              },
              function(dirEntry) {
                  dirEntry.getFile(
                      "pdf-number-1.pdf", 
                      {
                          create: false, 
                          exclusive: false
                      }, 
                      function gotFileEntry(fe) {
                          $ionicLoading.hide();
                          $scope.imgFile = fe.toURL();
                          alert(fe.toURL());
                          window.open(fe.toURL(), '_system', 'location=no,toolbar=yes,closebuttoncaption=Close PDF,enableViewportScale=yes');
                      }, 
                      function(error) {
                          $ionicLoading.hide();
                          console.log("Error getting file");
                      }
                  );
              }
          );
      },
      function() {
          $ionicLoading.hide();
          console.log("Error requesting filesystem");
      });
    }
});

並在控制器中:

.controller('SomeCtrl', function($scope, $ionicPopup, pdfService) {

 ...

pdfService.download = function(url) {
  console.log('pdfService download');
}
pdfService.load = function() {
  console.log('pdfService load');
}

您需要將服務注入到控制器中,並以所需的兩個參數作為參數調用函數。 例如。

.service('pdfService', function(){
   var lastUrl;
   var lastFileName
   return {
      createPdf(url, fileName){
          //do processing
          lastUrl = url;
          lastFileName = fileName
      },
      loadLastPdf(){
         //use lastUrl and lastFileName
      }
   }
}

並在您的控制器中:

.controller('SomeCtrl', function(pdfService) {
    pdfService.createPdf('http://example.com', 'file.pdf');
    // or pdfService.loadLastPdf();
}

就是說,您要報告的錯誤意味着DI無法找到名稱為pdfService的服務來注入您的控制器。 這可能是因為您忘記了將service.js文件作為腳本標簽包含在html中(如果您這樣做的話),或者忘記了使用require將其作為依賴項添加(如果您使用的是諸如browserify之類的東西)或也許是因為您未使用minsafe語法而使代碼最小化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM