2016-10-05 7 views
1

私はangularJSを新しくしました。私はangularjsを使ってウェブサイトを実装しています。ウェブサイトには2つのページがあります。最初のページにすべてのアイテムが表示され、ユーザーがそれをクリックすると詳細情報ページにリダイレクトされます。Angularjs、コントローラからのビューのリダイレクト

私は私のルートは以下のように設定する必要があり:

var app = angular.module('myApp', ["ngRoute"]); 
app.config(function($routeProvider) { 
$routeProvider 
    .when("/list", { 
     templateUrl : "list.html", 
     controller : "listCtrl" 
    }) 
    .when("/detail/:id"){ 
     templateUrl : "detail.html" 
    } 
}); 

するlist.htmlで。私はng-repeatを使って項目のリストを表示し、リスナーを使ってマウスのクリックを聞きます。

<ul class="list-group"> 
    <li class="list-group-item" ng-repeat="i in items">{{i.name}} 
     <a href="#" ng-click="goToEdit($index)"> 
     <span class="glyphicon glyphicon-pencil"></span> 
     </a> 
    </li> 
</ul> 

ng-click機能で詳細情報にリダイレクトしたいと考えています。 私は$location.path()を試しましたが、動作しません。

$scope.goToEdit = function(index){ 
     console.log($location.path()); 
     $location.path("/detail/" + index); 
     console.log($location.path()); 
} 

この方法は機能しません。 コンソールshow location.path()の2番目のログが "/ detail/id"に変更されました。

$location.path();の後に$scope.$apply()を追加すると、すでに処理中のエラーが発生します。

解決策はありますか?

おかげ

+0

コントローラを見せてもらいます、何を注入していますか? – Mike

+0

Plunkerで問題を再現できますか? – Phil

答えて

1
ハッシュベースのルーティング

あなたは自分だけのHREFを設定することができ、実際にコントローラ機能やng-click

を必要としない使用しているときそれは良いではありません使用 href="#"とは何かを持っているかもしれません

<a ng-href="#/detail/{{$index}}" > 

$インデックスが原因NGリピートまたは配列

からデータを削除するには、フィルタを使用して変えることができるよう、あなたが本当に各項目に一意の識別子を与える必要があります注意

また、2番目のルートにコントローラが指定されていない

+0

HTML5モードを使用している場合は苦痛になります。接頭辞 '# 'は必要ありません。私がui.routerを好きになるもう一つの理由 – Phil

+0

@Philは完全に 'ui-sref'がそれをはるかに簡単にし、html5Modeにとらわれないことに同意します – charlietfl

+0

' $ location.path'を使うことはHTML5モードにも無関係でなければなりません。私はOPのコードが動作しない理由を見ることができません – Phil

関連する問題