Cordova 角度ng视图/路由在PhoneGap中不工作

Cordova 角度ng视图/路由在PhoneGap中不工作,cordova,routing,angularjs,angular-routing,Cordova,Routing,Angularjs,Angular Routing,我在PhoneGap中的ngView有问题 一切似乎都加载刚刚好,我甚至可以得到一个基本的控制器工作使用ng控制器。但是当我尝试使用ngView路由时,什么都没有发生 index.html app.js angular.module('App',[]).config(函数($routeProvider){ $routeProvider.when(“/test”{ 控制器:TestCtrl, 模板:“{test}}” }); }); 函数TestCtrl($scope){ $scope.tes

我在PhoneGap中的ngView有问题

一切似乎都加载刚刚好,我甚至可以得到一个基本的控制器工作使用ng控制器。但是当我尝试使用ngView路由时,什么都没有发生

index.html


app.js

angular.module('App',[]).config(函数($routeProvider){
$routeProvider.when(“/test”{
控制器:TestCtrl,
模板:“{test}}”
});
});
函数TestCtrl($scope){
$scope.test=“工作!”;
}
Eclipse记录器在消息上显示
onMessage(onPageFinished,fle:///android_asset/www/index.html#/test)
每次我单击链接时,如果不使用
#
尝试该链接,只会引发一个无法找到路径的错误


根据我在其他地方的准备,这应该是有效的。任何帮助都将不胜感激。

我的问题是域名白名单

基本上,您的.config需要如下所示:

angular.module('App', []).config(function ($routeProvider, $compileProvider) {

    $routeProvider.when('/test', {
        controller: TestCtrl,
        template: '<h1> {{ test }} </h1>'        
    });
    $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
});
angular.module('App',[]).config(函数($routeProvider,$compileProvider){
$routeProvider.when(“/test”{
控制器:TestCtrl,
模板:“{test}}”
});
$compileProvider.urlsanizationwhitelist(/^\s*(https?| ftp | mailto | file | tel):/);
});

在搜索了几个问题和论坛后,我终于让它可靠地工作了。这就是我从一个干净的PhoneGap项目中运行它所花费的时间

index.html


你好,世界
app.initialize();
注意
标记。如果没有指令的值,应用程序将无法加载,因此请确保包含一个值

index.js

var-app={
初始化:函数(){
这是bindEvents();
},
bindEvents:function(){
document.addEventListener('devicerady',this.ondevicerady,true);
},
ondevicerady:function(){
元素(文档).ready(函数(){
角度引导(文档);
});
},
};
在这个文件中,当PhoneGap触发
'ondeviceready'
事件时,我们将手动引导Angular

路由器.js

angular.module('App',[])
.config(函数($compileProvider){
$compileProvider.urlsanizationwhitelist(/^\s*(https?| ftp | mailto | file | tel):/);
})
.config(函数($routeProvider){
$routeProvider
。当(“/”{
控制器:TestCtrl,
templateUrl:'partials/main.html'
})
.when(“/view”{
控制器:ViewCtrl,
templateUrl:“partials/view.html”
});
});
这个文件中有两件重要的事情。首先,我们使用之前在
中使用的相同名称创建模块。其次,我们需要将路由器配置为白名单 文件URI。我个人并不需要这个,但似乎有几个人遇到了这个问题,所以我把它包括在内

controllers.js

函数TestCtrl($scope){
$scope.status=“它有效!”;
}
函数ViewCtrl($scope){
$scope.status=“也完全有效!”;
}
最后,只是一些基本的控制器

我用所有这些创建了一个github回购协议


希望这对其他人有所帮助。

Angular 1.2没有提供此方法

$compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/)

不管怎么说,似乎已经没有必要了。我在我的手机上测试了它,它可以在没有的情况下工作。

我通过禁用Google Chrome中的本地访问策略标志解决了这个问题

$ open -a Google\ Chrome --args --disable-web-security for Mac OS.

以下是如何禁用本地访问文件策略的说明。

FWIW-这是我为这个问题支付的2美分:

所有这些似乎都起到了作用,促使我朝着一个可以工作的应用程序迈进,但我仍然无法让$routeprovider在页面之间导航

我的最后一个问题是——我在jqueryMobile库的一个脚本标记中有一个include,它在Angular获得URL请求之前劫持了这些请求。当我移除它时,导航请求最终到达$routeprovider,现在一切正常


希望这有助于某人…

万一有人遇到这种情况,UrlSanitationWhitelist是angular较新版本中的AHRefSanitationWhitelist一年后的情况:我注意到在Cordova中以这种方式引导angular会产生以下错误:“”错误:ng:btstrpd应用程序已使用此元素“document”“引导”-表示angular已加载。我遇到了类似错误。解决方案是,如果调用angular.bootstrap,则不要将“ng app”属性添加到HTML中。您可以执行一项或另一项操作,但不能同时执行两项操作。是否可以将模块传递给变量,如var appModule=angular.module('App',[])等?您将在何处初始化webSql数据库?您应该使用
ng href
而不是普通的
href
,以便angular可以正确重写URL。请尝试ahrefsanitationwhitelist