Android 带有Phonegap和AngularJS的HTML5模式

Android 带有Phonegap和AngularJS的HTML5模式,android,angularjs,cordova,Android,Angularjs,Cordova,我试图让AngularJS html5模式(true)与Phonegap一起工作。 我在发布这篇文章之前做了很多搜索,我尝试了不同的组合 配置,在meta中添加标记(也尝试了,和), 将.html后缀添加到路由端点,在.config块中添加$delegate.history=false(如follow) $provide.decorator('$sniffer', function($delegate) { $delegate.history = false; return $d

我试图让AngularJS html5模式(true)与Phonegap一起工作。 我在发布这篇文章之前做了很多搜索,我尝试了不同的组合 配置,在meta中添加标记(也尝试了,和), 将.html后缀添加到路由端点,在.config块中添加$delegate.history=false(如follow)

$provide.decorator('$sniffer', function($delegate) {
    $delegate.history = false;
    return $delegate;
});
显然

$locationProvider.hashPrefix('!');
$locationProvider.html5Mode(true);
但没有办法让它工作,添加标记并将html5Mode设置为true将导致应用程序启动时出现一个空白屏幕。 此外,添加其中一个将带来相同的结果,即空白屏幕

添加带有“android_资产”的基本标签,如下图所示

将正确加载主控制器,但会中断路由

使用目标属性“\u blank”和“\u self”值进行测试

所以我的问题是,, 可以使用Phonegap和AngularJS启用html5模式吗

我正在使用cordova版本3.4.1-0.1.0和AngularJS 1.2.16, 在Android 4.0.4 real设备和Android AVD 4.4.2上测试

任何建议都将不胜感激!
感谢

根据我的经验和Raymond Camden(他在PhoneGap上工作)的经验,不可能将HTML5模式与PhoneGap+Angular一起使用。

为了解决现有网站的这个问题,我在构建时添加了angularjs常量,指示构建是否针对PhoneGap。在配置时,您可以访问常量并选择应用HTML5模式

//Add this portion via your build scripts e.g. grunt or gulp
//make the constant change depending on if this is a Phonegap build or not
angular.module('myAppConstants', []).constant('PhonegapConstant', true);

//How to use
angular.module('myApp', ['myAppConstants']).config(function(
    $locationProvider,
    PhonegapConstant
) {
    if(!PhonegapConstant) {
        $locationProvider.html5mode(true);
        $locationProvider.hashPrefix('!');
    }
});

我刚刚用angularjs 1.5、新组件路由器和cordova(phonegap)6.0实现了这一点

这有点老套,但我要做的是:

  • 从html文件中删除
    标记
  • 设置html5模式,同时将requireBase设置为false
  • $locationProvider.html5Mode({enabled:true,requireBase:false})

  • 赶上cordova(phonegap)路线

  • 制作一个cordova组件,然后将其重新路由到您喜欢的任何地方

        if(cookieService.loggedIn()) {
            $rootRouter.navigate(['Newsfeed']);
        }
        else {
            $rootRouter.navigate(['Title']);
        }
    

  • 现在剩下的路线你可以正常使用了。不过,我确实遇到了一个问题,我所有的本地图像和SVG都需要从完整路径开始,/android\u asset/www/images for android,所以我制作了一个小过滤器,为web、android和ios提供正确的资产路径。

    谢谢Steve,至少这是不可能的。你知道在使用html5模式的已经完成的AngularJS应用程序中,移植到Phonegap是否有任何解决方法吗?我过去所做的就是关闭html5模式。在任何情况下,在phonegap下都是毫无意义的!我同意你的看法,在Phonegap下这没有任何意义,我从来没有想过要说别的。我的观点是,如果我有一个已经完成的应用程序,它使用html5模式,移植到Phonegap不是直接的。。。无论如何,再次感谢你的回答@SergioRinaudo我意识到这对现有代码没有帮助,但我认为这是对使用ui路由器的投票,这样您就可以根据州名称而不是直接使用URL进行路由。此外,我还发现,它构建在cordova之上,似乎可以与html5模式一起工作(不知道为什么)。MCA还没有发布一个主要版本,而且我在使用它时遇到了其他问题,所以它可能不是万能的。我也处于同样的情况,我能做的最好的事情就是用C#解析JS/HTML/CSS并替换链接,所以每次我将Angular web应用部署到手机上时,我都会运行解析器,然后编译。有更好的办法吗?大口喝?是的,但是所有的链接呢?如果一个链接在一个模板中,我必须使用/并且它显然打破了phonegap应用程序。有关于如何管理Angular/Phonegap的单个代码库的教程吗?@Toolkit如果您使用常规HTML5模式链接,您可以使用它来支持本机和浏览器应用程序之间的链接。实际上,我现在使用的是ui sref=“login”样式
        if(cookieService.loggedIn()) {
            $rootRouter.navigate(['Newsfeed']);
        }
        else {
            $rootRouter.navigate(['Title']);
        }