我一直在靠墙试图弄清楚为什么angularJS路由不能在我的phonegap中工作。我已正确设置所有文件,我没有收到任何错误。我正在尝试直接从angular使用$ location.url服务更改网址。因此,当您点击div时,控制器将具有$ location.url(“profile”),例如,什么都不会发生。我尝试了stackoverflow中找到的解决方案,但这对我不起作用。我做错了什么,或者有更好的方法来接近这个?以下是我设置的路由
var app = angular.module("App", ["hmTouchevents"])
.config(function($routeProvider) {
$routeProvider
.when("/index.html", {
templateUrl: "/views/login.html",
controller: "loginCtlr"
})
.when("/landing", {
templateUrl: "/views/landing.html",
controller: "landingCtlr"
})
.when("/single-view/:id", {
templateUrl: "/views/single-view.html",
controller: "singleViewCtlr"
})
.when("/restaurant", {
templateUrl: "/views/restaurant-info.html",
controller: "restaurantCtlr"
})
.when("/profile/:id", {
templateUrl: "/views/profile.html",
controller: "profileCtlr"
})
.when("/lists/:list", {
templateUrl: "/views/lists.html",
controller: "listsCtlr"
})
.when("/follow/:type", {
templateUrl: "/views/follow.html",
controller: "followCtlr"
});
});
样本控制器将是:
app.controller("listsCtlr", ["$scope", "$location", function($scope, $location){
$scope.goTo("profile");
}]);
一如既往,我们非常感谢任何帮助。
答案 0 :(得分:4)
今晚我遇到了类似的问题。这里的核心问题是PhoneGap没有内置的Web服务器。如果您在本地开发,您可能正在使用Web服务器,因此您可以执行以下操作:http://localhost/#/profile
并且路由将起作用。
但是,PhoneGap会使用file://
网址加载您的代码,而非http://
。如果您执行$location.url("profile")
,则仅使用file://profile
替换整个网址,而该网址不存在。如果您使用这样的链接,同样的事情:<a href="/#/profile">My Profile</a>
解决方案是以某种方式让您的链接指向正确的位置。如果您使用的是$location.url()
,则可以在其前面添加文件路径:$location.url( window.location + "#/profile" )
如果您只是建立一个链接,那么您应该可以通过取消前导斜杠来使其成为相对网址:<a href="/#/profile">My Profile</a>
变为<a href="#/profile">My Profile</a>
答案 1 :(得分:4)
有完全相同的问题......我可以通过将以下代码添加到index.html文件的头部来轻松解决此问题。
<base href="/android_asset/www/" />
希望这有帮助。
答案 2 :(得分:0)
尝试...
$location.path('/profile');
答案 3 :(得分:0)
经过多次修补,这对我有用!
如果您可以在控制器中使用$ location.path(),它应该按预期工作,但如果您需要使用href样式的链接,您可以建立角度&#34; base&#34;页面(例如main.html):
<a href="main.html#/profile">Link To Profile</a>