2013-08-12 9 views
6

私はwallJSルーティングがphonegapで動作しない理由を突き止めようとしています。私はすべてのファイルが正しく設定されていると私はエラーが表示されません。私はURLから$ location.urlサービスを直接使用してURLを変更しようとしています。ですから、divをタップするとコントローラには$ location.url( "profile")があり、何も起こりません。私はこのstackoverflowで見つかった解決策を試しましたが、それは私のために働いていません。私は何か間違っているのですか?これに近づくより良い方法がありますか? PhoneGapでAngularJSルーティングが正常に動作しない

app.controller("listsCtlr", ["$scope", "$location", function($scope, $location){ 

$scope.goTo("profile"); 

}]); 

は、いつものように任意のヘルプははるかに高く評価されています。以下は、私がサンプルコントローラは次のようになり、セットアップ

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" 
    }); 

}); 

を持っているルーティングです。お使いのコントローラの試みで

+0

'$ location.url("#/ profile ")'? –

+0

私はまだダイスがありません。 URLはうまく変化しているようですが、角度はテンプレートをつかんでngviewに配置していないようです。 – selanac82

+0

あなたはhtml5modeを使用しようとしましたか? –

答えて

0

...

$location.path('/profile'); 
4

私がこの今夜に同様の問題がありました。ここでの中心的な問題は、PhoneGapにはWebサーバーが組み込まれていないことです。ローカルで開発している場合はおそらくWebサーバーを使用しているため、http://localhost/#/profileのような処理を行うことができます。

ただし、ではなく、file://というURLを使用してPhoneGapがコードを読み込みます。 $location.url("profile")を実行すると、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>

0

多くの調整をした後、私のために働いたことがあります!

コントローラー内で$ location.path()を使用することができれば、期待どおりに動作するはずですが、hrefスタイルのリンクを使用する必要がある場合は、角度のある「ベース」ページ.htmlを):

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

4

は、私は私のindex.htmlファイルの先頭に次のコードを追加することで簡単にこの問題を解決することができました...正確に同じ問題を持っていました。

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

これが役に立ちます。

+0

これは私にとってもうまくいきました.iOSで同様の修正が必要なのでしょうか? Macを持っていないので、現時点でこれをテストするのは難しいです。 – KungWaz

+0

@ KungWaz私はiOSでこれを試していません。私はベースがiOSでは '/ android_asset /'ではないと信じているので、ログを調べてページがどこから読み込まれているのかを確認し、ベースタグを 'www'フォルダに切り替えます。 – gcr15

+2

これは適切な解決策ではありません。なぜなら、Androidデバイスのみで動作するからです... –

関連する問題