首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cordova文件在Cordova应用程序中未定义。

cordova文件在Cordova应用程序中未定义。
EN

Stack Overflow用户
提问于 2016-01-10 08:30:38
回答 3查看 1.6K关注 0票数 0

=====Cordova文件是undefined=====

嗨。

我正试着和科多瓦一起学习移动开发。我想创建一个类似instagram的应用程序,在其中存储内存。应用程序使用两页:

  • 显示所有存储存储器的页面;
  • 添加内存的页面。内存存储在本地json文件中。

我创建文件和在内部编写新内存的代码似乎有效(我无法打开所创建的文件,因此无法确定,但我没有任何错误.)。现在我正在尝试使用ngCordova文件插件来访问该文件并显示其内容。

下面是我的代码(现在):注意:为了更好的理解,我的代码已经被翻译成英文了。我希望我没有犯任何翻译错误,与手头的话题无关。

index.html

代码语言:javascript
运行
复制
<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 (首次加载文件,自动生成)

代码语言:javascript
运行
复制
(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 (声明应用程序)

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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是存储在fileSystem根目录下的文件。为了创建这个文件,我没有使用ngCordova,而是使用了cordova的“标准”函数。

我得到以下错误: TypeError:无法读取未定义的属性'dataDirectory‘。我想我使用了正确的东西,我在这里找到了:http://ngcordova.com/docs/plugins/file/

以下是我试过但没有成功的地方:

  • 引导应用程序(请参阅index.js文件中的注释)
  • 使用window.requestFileSystem()来声明FileSystem,就像在其他控制器中那样,但是$cordovaFile.readAsText()需要一个常量。

我很确定我的错误是显而易见的,但我无法理解.

如果你需要的话我可以给你更多的代码。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-17 07:28:54

我真的不明白这里发生了什么。Cordova.file根本没有正确加载。

我创建了一个新项目,增加了乞丐的插件,并把所有的东西都写回来了。让我们把VisualStudio放在错误的地方,这样更容易:)

票数 0
EN

Stack Overflow用户

发布于 2016-01-10 09:05:20

可能是在设备准备好之前,您正在尝试使用cordova.file。作为测试,尝试将代码移动到事件处理程序中。

代码语言:javascript
运行
复制
document.addEventListener('deviceready', function () {
  // Put code here
});
票数 1
EN

Stack Overflow用户

发布于 2016-01-12 17:07:47

因此,我在另一篇类似主题上发表文章,并在我的申请中添加了以下内容:

index.js (第一次加载文件)

代码语言:javascript
运行
复制
(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

代码语言:javascript
运行
复制
<html ng-app="myMemories">

(我学到了ng-app已经引导了应用程序)

当我启动我的代码时,我有以下内容:

“在科多瓦运行,将引导AngularJS一旦‘设备阅读’事件火灾。”

"Deviceready事件已经启动,引导AngularJS。“

TypeError:无法读取未定义的属性“dataDirectory”

我不明白这里发生了什么。我的代码是在"devideReady“发生后执行的,所以cordova.file应该是可用的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34703525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档