[英]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.