Cordova 应用程序中未定义 cordova 文件
cordova file is undefined in Cordova application
=====Cordova 文件未定义=====
你好。
我正在尝试使用 Cordova 学习一些移动开发。我想创建一个类似 instagram 的应用程序,其中将存储记忆。该应用程序使用两个页面:
- 显示所有存储记忆的页面;
- 一个页面添加一个内存。记忆存储在本地 json 文件中。
我创建文件并在其中写入新内存的代码似乎有效 (我无法打开创建的文件,所以我不能确定,但我没有收到任何错误...)。
我现在正在尝试使用 ngCordova 文件插件来访问该文件并显示其内容。
这是我的代码(目前):注意:我的代码已翻译成英文以便更好地理解。我希望我没有犯任何与手头主题无关的翻译错误
index.html
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<!-- Donwloaded files -->
<script src="scripts/jquery-2.1.4.js"></script>
<script src="scripts/angular.js"></script>
<script src="scripts/angular-route.js"></script>
<script src="scripts/bootstrap.js"></script>
<script src="scripts/ng-cordova.js"></script>
<!--Own libraries-->
<script src="lib/index.js"></script>
<script src="lib/app.js"></script>
<script src="lib/controleurs/addMemoryController.js"></script>
<script src="lib/controleurs/memoriesController.js"></script>
<!-- Cordova reference -->
<script src="cordova.js"></script>
<script src="scripts/platformOverrides.js"></script>
</head>
index.js (第一次加载文件,自动生成)
(function () {
"use strict";
document.addEventListener( 'deviceready', onDeviceReady.bind( this ), false );
function onDeviceReady()
document.addEventListener( 'pause', onPause.bind( this ), false );
document.addEventListener( 'resume', onResume.bind( this ), false );
//angular.bootstrap(document, ['myMemories']); //aborted try. Give me the error : Uncaught Error: [ng:btstrpd] App Already Bootstrapped with this Element 'document'
};
function onPause() {
};
function onResume() {
};
} )();
app.js (申报申请)
var app = angular.module('myMemories', ['ngRoute','ngCordova']);
app.config(function ($routeProvider) {
$routeProvider
.when("/", {
templateUrl: "views/memories.html",
controller: "memoriesController"
})
.when("/ajouteSouvenir", {
templateUrl: "views/addMemory.html",
controller: "addMemoryController"
})
.otherwise({ redirectTo: "/" });
});
memoriesController.js
app.controller("souvenirsControleur", function ($scope,$rootScope,$cordovaFile) {
if (!$rootScope.memoriesList) {
$cordovaFile.readAsText(cordova.file.dataDirectory, "stored_memories.json").then(
function (pResult) {
if (typeof (pResult) == "string") {
$rootScope.memoriesList= JSON.parse(pResult);
} else {
$rootScope.memoriesList= pResult;
}
},
function (pError) { console.log("error : readAsText"); console.log(pError);}
);
}
});
- $rootScope.memoriesList是在addMemoryController中创建的数组
里面存放着所有的回忆
- stored_memories.json 是存储在文件系统根目录下的文件。为了创建文件,我没有使用 ngCordova,而是使用了 cordova 的 "standard" 函数。
我收到以下错误:类型错误:无法读取未定义 的属性 'dataDirectory'。虽然我使用了正确的东西,但我在这里找到了它:http://ngcordova.com/docs/plugins/file/
这是我尝试过但没有奏效的方法:
- 引导应用程序(参见 index.js 文件中的注释)
- 像我在另一个控制器中那样使用 window.requestFileSystem() 声明文件系统,但是 $cordovaFile.readAsText() 需要一个常量。
我很确定我的错误是显而易见的,但我无法理解...
如果你需要,我可以提供更多代码。
可能是您在设备准备就绪之前尝试使用 cordova.file。作为测试,尝试将代码移动到事件处理程序中
document.addEventListener('deviceready', function () {
// Put code here
});
所以我关注了另一个关于类似主题的 post,并在我的申请中添加了这个:
index.js (第一个加载的文件)
(function () {
"use strict";
angular.element(document).ready(function () {
if (window.cordova) {
console.log("Running in Cordova, will bootstrap AngularJS once 'deviceready' event fires.");
document.addEventListener('deviceready', function () {
console.log("Deviceready event has fired, bootstrapping AngularJS.");
angular.bootstrap(document.body, ['myMemories']);
}, false);
} else {
console.log("Running in browser, bootstrapping AngularJS now.");
angular.bootstrap(document.body, ['myMemories']);
}
});
} )();
我还从 index.htm 文件中删除了以下行:
index.html
<html ng-app="myMemories">
(我了解到 ng-app 已经启动了应用程序)
当我启动我的代码时,我有这个:
"Running in Cordova, will bootstrap AngularJS once 'deviceready' event fires."
"Deviceready event has fired, bootstrapping AngularJS."
TypeError: 无法读取未定义的 属性 'dataDirectory'
我不明白这里发生了什么。我的代码是在 "devideReady" 发生后执行的,所以 cordova.file 应该可用!
我真的不明白这里发生了什么。Cordova.file 根本没有正确加载。
我创建了一个新项目,从一开始就添加了插件,并在没有任何其他更改的情况下写回了所有内容。让我们把 VisualStudio 的错放在这里,它更容易:)
=====Cordova 文件未定义=====
你好。
我正在尝试使用 Cordova 学习一些移动开发。我想创建一个类似 instagram 的应用程序,其中将存储记忆。该应用程序使用两个页面:
- 显示所有存储记忆的页面;
- 一个页面添加一个内存。记忆存储在本地 json 文件中。
我创建文件并在其中写入新内存的代码似乎有效 (我无法打开创建的文件,所以我不能确定,但我没有收到任何错误...)。 我现在正在尝试使用 ngCordova 文件插件来访问该文件并显示其内容。
这是我的代码(目前):注意:我的代码已翻译成英文以便更好地理解。我希望我没有犯任何与手头主题无关的翻译错误
index.html
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<!-- Donwloaded files -->
<script src="scripts/jquery-2.1.4.js"></script>
<script src="scripts/angular.js"></script>
<script src="scripts/angular-route.js"></script>
<script src="scripts/bootstrap.js"></script>
<script src="scripts/ng-cordova.js"></script>
<!--Own libraries-->
<script src="lib/index.js"></script>
<script src="lib/app.js"></script>
<script src="lib/controleurs/addMemoryController.js"></script>
<script src="lib/controleurs/memoriesController.js"></script>
<!-- Cordova reference -->
<script src="cordova.js"></script>
<script src="scripts/platformOverrides.js"></script>
</head>
index.js (第一次加载文件,自动生成)
(function () {
"use strict";
document.addEventListener( 'deviceready', onDeviceReady.bind( this ), false );
function onDeviceReady()
document.addEventListener( 'pause', onPause.bind( this ), false );
document.addEventListener( 'resume', onResume.bind( this ), false );
//angular.bootstrap(document, ['myMemories']); //aborted try. Give me the error : Uncaught Error: [ng:btstrpd] App Already Bootstrapped with this Element 'document'
};
function onPause() {
};
function onResume() {
};
} )();
app.js (申报申请)
var app = angular.module('myMemories', ['ngRoute','ngCordova']);
app.config(function ($routeProvider) {
$routeProvider
.when("/", {
templateUrl: "views/memories.html",
controller: "memoriesController"
})
.when("/ajouteSouvenir", {
templateUrl: "views/addMemory.html",
controller: "addMemoryController"
})
.otherwise({ redirectTo: "/" });
});
memoriesController.js
app.controller("souvenirsControleur", function ($scope,$rootScope,$cordovaFile) {
if (!$rootScope.memoriesList) {
$cordovaFile.readAsText(cordova.file.dataDirectory, "stored_memories.json").then(
function (pResult) {
if (typeof (pResult) == "string") {
$rootScope.memoriesList= JSON.parse(pResult);
} else {
$rootScope.memoriesList= pResult;
}
},
function (pError) { console.log("error : readAsText"); console.log(pError);}
);
}
});
- $rootScope.memoriesList是在addMemoryController中创建的数组 里面存放着所有的回忆
- stored_memories.json 是存储在文件系统根目录下的文件。为了创建文件,我没有使用 ngCordova,而是使用了 cordova 的 "standard" 函数。
我收到以下错误:类型错误:无法读取未定义 的属性 'dataDirectory'。虽然我使用了正确的东西,但我在这里找到了它:http://ngcordova.com/docs/plugins/file/
这是我尝试过但没有奏效的方法:
- 引导应用程序(参见 index.js 文件中的注释)
- 像我在另一个控制器中那样使用 window.requestFileSystem() 声明文件系统,但是 $cordovaFile.readAsText() 需要一个常量。
我很确定我的错误是显而易见的,但我无法理解...
如果你需要,我可以提供更多代码。
可能是您在设备准备就绪之前尝试使用 cordova.file。作为测试,尝试将代码移动到事件处理程序中
document.addEventListener('deviceready', function () {
// Put code here
});
所以我关注了另一个关于类似主题的 post,并在我的申请中添加了这个:
index.js (第一个加载的文件)
(function () {
"use strict";
angular.element(document).ready(function () {
if (window.cordova) {
console.log("Running in Cordova, will bootstrap AngularJS once 'deviceready' event fires.");
document.addEventListener('deviceready', function () {
console.log("Deviceready event has fired, bootstrapping AngularJS.");
angular.bootstrap(document.body, ['myMemories']);
}, false);
} else {
console.log("Running in browser, bootstrapping AngularJS now.");
angular.bootstrap(document.body, ['myMemories']);
}
});
} )();
我还从 index.htm 文件中删除了以下行: index.html
<html ng-app="myMemories">
(我了解到 ng-app 已经启动了应用程序)
当我启动我的代码时,我有这个:
"Running in Cordova, will bootstrap AngularJS once 'deviceready' event fires."
"Deviceready event has fired, bootstrapping AngularJS."
TypeError: 无法读取未定义的 属性 'dataDirectory'
我不明白这里发生了什么。我的代码是在 "devideReady" 发生后执行的,所以 cordova.file 应该可用!
我真的不明白这里发生了什么。Cordova.file 根本没有正确加载。
我创建了一个新项目,从一开始就添加了插件,并在没有任何其他更改的情况下写回了所有内容。让我们把 VisualStudio 的错放在这里,它更容易:)