首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“设备未定义”:Codrova/Ionic + TypeScript

“设备未定义”:Codrova/Ionic + TypeScript
EN

Stack Overflow用户
提问于 2015-06-17 03:41:01
回答 1查看 3.3K关注 0票数 1

当我在浏览器(通过ionic serve)和我的设备上加载我的离子应用程序时,我得到了非常常见的device is not defined错误。

我是TypeScript的新手,我认为我的麻烦可能与那里的一些误解有关。

我的index.html包含(注意,我的DOM元素中缺少ng-app ):

代码语言:javascript
复制
    <link href="css/ionic.app.min.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">

    <script src="lib/ionic/js/ionic.bundle.js"></script>

    <!-- inject:js -->
    <script src="lib/node_modules/ng-cordova/dist/ng-cordova-mocks.min.js"></script>
    <script src="lib/node_modules/ng-cordova/dist/ng-cordova.min.js"></script>
    <script src="lib/node_modules/ng-cordova/src/plugins/device.js"></script>
    <script src="lib/node_modules/ng-cordova/src/plugins/file.js"></script>
    <!-- endinject -->

    <!-- cordova script (this will be a 404 during development) -->
    <script src="cordova.js"></script>

</head>
<body>

  <div ui-view=""></div>

  <script src="app.js"></script>
  <script src="bootstrapApp.js"></script>

</body>

这里,app.js是从TypeScript编译而来的。我在这里做了相当多的事情,但有趣的是:

代码语言:javascript
复制
var App;
(function (App) {
    "use strict";
    angular.module("app", [
        "ionic",
        "ngCordova",
        "ui.router"
    ])
    .config(function ($stateProvider, $urlRouterProvider) {
        $stateProvider.state("splash", {
            url: "/splash",
            templateUrl: "components/splash/splash.html",
            controller: "SplashController"
        });
        $urlRouterProvider.otherwise("/splash");
    });
})(App || (App = {}));
var App;
(function (App) {
    "use strict";
    var DeviceService = (function () {
        function DeviceService($cordovaDevice) {
            this.device = null;
            this.device = $cordovaDevice.getDevice();
            console.log(this.device);
        }
        DeviceService.$inject = ["$cordovaDevice"];
        return DeviceService;
    })();
    angular.module("app").service("DeviceService", DeviceService);
})(App || (App = {}));

为了确保我的设备“就绪”,我遵循了我在这里找到的一个建议:https://stackoverflow.com/a/27975700/3817101

因此,我有一个包含以下内容的bootstrapApp.js文件:

代码语言:javascript
复制
window.ionic.Platform.ready(function() {
    console.log("platform is ready");
    angular.bootstrap(document, ['app']);
});

在页面加载时,除了$cordovaDevice的使用之外,一切看起来都很顺利。我的控制台上写着:

代码语言:javascript
复制
platform is ready
ionic.bundle.js:20306 ReferenceError: device is not defined

很明显,我试图在东西“准备好”之前使用这个设备,但我似乎找不出哪里出了问题。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-17 07:29:27

错误不在您发布的代码中(您需要像this.device.foo这样的代码才能得到错误,而代码中没有这样的.foo )。

解决方案

JS文件的排序可能会导致这种情况。更改:

代码语言:javascript
复制
<script src="lib/ionic/js/ionic.bundle.js"></script>

<!-- inject:js -->
<script src="lib/node_modules/ng-cordova/dist/ng-cordova-mocks.min.js"></script>
<script src="lib/node_modules/ng-cordova/dist/ng-cordova.min.js"></script>
<script src="lib/node_modules/ng-cordova/src/plugins/device.js"></script>
<script src="lib/node_modules/ng-cordova/src/plugins/file.js"></script>
<!-- endinject -->

至:

代码语言:javascript
复制
<!-- inject:js -->
<script src="lib/node_modules/ng-cordova/dist/ng-cordova-mocks.min.js"></script>
<script src="lib/node_modules/ng-cordova/dist/ng-cordova.min.js"></script>
<script src="lib/node_modules/ng-cordova/src/plugins/device.js"></script>
<script src="lib/node_modules/ng-cordova/src/plugins/file.js"></script>
<!-- endinject -->

<script src="lib/ionic/js/ionic.bundle.js"></script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30876694

复制
相关文章

相似问题

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