6

我一直在拼命想弄清楚为什么 angularJS 路由对我来说在 phonegap 中不起作用。我正确设置了所有文件,并且没有收到任何错误。我正在尝试使用 $location.url 服务直接从角度更改 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");

}]);

一如既往,非常感谢任何帮助。

4

4 回答 4

4

有完全相同的问题......我可以通过将以下代码添加到我的 index.html 文件的头部来轻松解决这个问题。

<base href="/android_asset/www/" />

希望这可以帮助。

于 2014-07-21T15:10:55.843 回答
4

我今晚遇到了类似的问题。这里的核心问题是PhoneGap没有内置Web服务器。如果您在本地开发,您可能正在使用Web服务器,因此您可以执行以下操作:http://localhost/#/profile并且路由将起作用。

file://但是,PhoneGap 使用URL加载您的代码,而不是http://. 如果你这样做$location.url("profile"),你将用 just 替换整个 URL file://profile,它不存在。如果您使用这样的链接,同样的事情:<a href="/#/profile">My Profile</a>

解决方案是以某种方式让您的链接指向正确的位置。如果您正在使用$location.url(),您可以在它前面加上您的文件路径:$location.url( window.location + "#/profile" )

如果您只是创建一个链接,您应该能够取消前导斜杠以使其成为相对 URL:<a href="/#/profile">My Profile</a>变为<a href="#/profile">My Profile</a>

于 2014-01-02T09:38:28.103 回答
0

经过多次修补,这对我有用!

如果您可以在控制器中使用 $location.path() ,它应该可以按预期工作,但如果您需要使用 href 样式的链接,您可以在有角度的“基础”页面(例如 main.html)之外构建链接:

<a href="main.html#/profile">Link To Profile</a>

于 2014-05-15T05:42:24.563 回答
0

在您的控制器中尝试...

$location.path('/profile');
于 2013-09-02T16:04:52.363 回答