ngInclude 在 Android 的 PhoneGap 构建中失败

Posted

技术标签:

【中文标题】ngInclude 在 Android 的 PhoneGap 构建中失败【英文标题】:ngInclude fails in PhoneGap build for Android 【发布时间】:2015-08-11 19:23:02 【问题描述】:

我正在使用 Angular 和 PhoneGap Build,我遇到了一个问题,该问题仅在应用由 PGB 构建并侧加载到我的 android 手机上时才会出现。

它在使用模拟器(在 Visual Studio 2015 中)和通过 PhoneGap 桌面 (phonegap serve) 时有效。

所有其他 Angular 的东西都可以工作,但无法加载模板。 AB 按预期显示,所以它不是 ngShow 的东西。

我已改用手动引导,但这没有帮助。

大家有什么建议吗?

index.html:

<!DOCTYPE html>
<html>
<head>
...
</head>
<body data-ng-controller="PageController as page">
    <header class="app-header">
        <div data-ng-show="!loggedIn">A<div data-ng-include="'views/_header/pre-login.html'"></div></div>
        <div data-ng-show="loggedIn">B<div data-ng-include="'views/_header/logged-in.html'"></div></div>
    </header>
    <div class="content" data-ng-view>
    </div>
    <footer class="app-footer" data-ng-show="loggedIn">
    </footer>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="lib/angular/angular.min.js"></script>
    <script type="text/javascript" src="lib/angular-route/angular-route.min.js"></script>
    <script type="text/javascript" src="lib/angular-resource/angular-resource.min.js"></script>
    <script type="text/javascript" src="js/pg-app.js"></script>
    <script type="text/javascript" src="js/ng-app.js"></script>
    <script type="text/javascript">
        pgApp.initialize();
    </script>
</body>
</html>

pg-app.js:

var pgApp = 
    initialize: function () 
        document.addEventListener('deviceready', this.onDeviceReady, false);
    ,
    onDeviceReady: function () 
        angular.bootstrap(document, ['fGApp'],  strictDi: false );
    
;

ng-app.js:

var fGApp = angular.module('fGApp', ['ngRoute', 'ngResource', 'fGControllers']);

fGApp.config(function ($routeProvider) 
    $routeProvider
        .when('/', 
            controller: 'HomeController',
            templateUrl: 'views/Account/_Account.html'
        )
        .when('/:controller/', 
            caseInsensitiveMatch: true,
            templateUrl: function (path)  return 'views/' + path.controller + '/_' + path.controller + '.html'; 
        )
        .when('/:controller/:view/', 
            caseInsensitiveMatch: true,
            templateUrl: function (path)  return 'views/' + path.controller + '/' + path.view + '.html'; 
        )

        .otherwise( redirectTo: '/' );
);

fGApp.run(function ($rootScope, $route) 
    $rootScope.loggedIn = false;

    $route.reload();
);

var fGControllers = angular.module('fGControllers', []);

// concat'd separate files follow

【问题讨论】:

【参考方案1】:

将目录 _header 重命名为 header(并更新模板 url)似乎解决了我的错误……可能是 android webview 或 cordova 怪癖。

【讨论】:

非常感谢!这是一个奇怪的怪癖。 宾果游戏 - 谢谢大家。一定会喜欢那些“未记录的功能”:-) 经过更多测试,这似乎是一个 angularjs 问题,因为在名为 _js 的目录中加载标准 js 文件和 XHR 似乎没有出现问题...

以上是关于ngInclude 在 Android 的 PhoneGap 构建中失败的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 在 ngInclude 中调用时 ngModel 不更新

AngularJS:ngInclude vs 指令

AngularJs练习Demo10 ngInclude

使用 nginclude 时避免使用额外的 DOM 节点

pho

如何从Android片段中的相机获取图像