Как я могу получить один сервис или фабрику, получая два параметра от многих контроллеров?Передача параметра от контроллера к службам в angularjs
Один параметр для URL-адреса, другой для имени файла, который будет храниться в файловой системе.
У меня будет много контроллеров, использующих эту услугу, каждый из которых передает свой собственный URL-адрес и имена файлов, которые читают URL-адрес и генерируют pdf-файл.
Я всегда буду хранить последний загруженный pdf, содержащий кнопку «открыть последний pdf», которая будет использовать параметр имени.
У меня будет кнопка «Создать новый pdf», исходящий от URL-адреса.
Я следую этому руководству https://blog.nraboy.com/2014/09/manage-files-in-android-and-ios-using-ionicframework/ и все работает нормально.
Я использую Cordova передачи файлов и inappbrowser Cordova плагины
Эти секции будут получать параметры:
dirEntry.getFile ("PDF-номер-1.pdf",
ft.download (encodeURI ("http://www.someservice.com"), р,
Моя попытка всегда вызывает сообщение 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');
}
Thank's mxa055! теперь ясно, я пытаюсь реализовать, но вижу простую ошибку sintax: Неожиданный токен. at line: this.downloadPdf = function (url, fileName) {код находится здесь: http://plnkr.co/edit/ASB7LSCuCRvVLGI3Kqxf в случае, если вы хотите дать указание указать синтаксическую ошибку. Лучшие советы. –
Да, я включаю службы js как 'code' ' code'. Я не уверен в том, как зарегистрировать сервис im my controller у меня есть: 'code'.контроллер ('SomeCtrl', ['$ scope', 'pdfService', функция ($ scope, $ ionicPopup, pdfService) { ... }]) 'code' –
Вы не можете вводить $ scope в свою службу, так как там нет представления, чтобы приклеить его. Также в декларации вашего контроллера вы не указали декларацию minsafe для $ ionicPopup в своем комментарии выше. Проверьте это, возможно, помогает http://plnkr.co/edit/S52j3LXvljWS2GJU7P1v?p=preview – masimplo