=====Cordova 文件未定义=====
你好。
我正在尝试使用 Cordova 学习一些移动开发。我想创建一个类似 Instagram 的应用程序,其中将存储记忆。该应用程序使用两个页面:
- 显示所有存储记忆的页面;
- 增加记忆的页面。内存存储在本地 json 文件中。
我创建文件并在其中写入新内存的代码似乎有效(我无法打开创建的文件,所以我无法确定,但我没有收到任何错误......)。我现在正在尝试使用 ngCordova 文件插件来访问该文件并显示其内容。
这是我的代码(暂时):注意:我的代码已被翻译成英文以便更好地理解。我希望我没有犯任何翻译错误,与手头的主题无关
索引.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: "/" });
});
记忆控制器.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 的“标准”功能。
我收到以下错误:TypeError: Cannot read property 'dataDirectory' of undefined。我虽然使用了正确的东西,但我在这里找到了:http: //ngcordova.com/docs/plugins/file/
这是我尝试过但没有奏效的方法:
- 引导应用程序(参见 index.js 文件中的注释)
- 使用 window.requestFileSystem() 来声明 FileSystem,就像我在另一个控制器中所做的那样,但是 $cordovaFile.readAsText() 需要一个常量。
我很确定我的错误很明显,但我无法理解......
如果您需要,我可以提供更多代码。