2017-03-06 5 views
0

ユーザが戻るボタンをクリックしたときにコントローラをリロードするにはどうすればいいですか?バックボタン角度ui-routerのリロードコントローラ

私はAngularJSのv1.6.2と角度-UI-ルータ0.4.2

状態を使用しています:

... 
    .state('cars.bmw', { 
     cache: false, 
     url: '/bmw', 
     templateUrl: 'pages/cars/bmw.html?v=' + version 
    }) 
    .state('cars.audi', { 
     cache: false, 
     url: '/audi', 
     templateUrl: 'pages/cars/audi.html?v=' + version 
    }) 
    ... 

は場所のパスを確認し、私は{{}}ヘッダーとタイトルを注入しています:

... 
if($location.path() === '/cars/bmw') 
{ 
    $scope.pageHeader = "BMW Cars"; 
    $scope.curentMenu = "CARS"; 
    $scope.title = My Car Collection BMW"; 
} 
... 

メニューリンク:

... 
<a ui-sref="cars.bmw" ui-sref-opts="{reload: true}">BMW</a> 
... 

たとえば、私が/cars/BMWパスにあり、/cars/audiに戻るボタンをクリックした場合、タイトル、ヘッダー、curentMenuは変更されません。ページを手動で更新してコントローラをリロードする必要があります。

+0

を考えますより良いアプローチは、$ location – cYrixmorten

答えて

0

以下のコードは、各状態の変更時にコントローラを解決します。試してみます。

.state('cars.bmw', { 
     cache: false, 
     url: '/bmw', 
     templateUrl: 'pages/cars/bmw.html?v=' + version 
     controller: 'YourController' 
    }) 

また、HTMLを投稿することもできます。

+0

を使用して推測しようとしている状態を解決することです。私はパスをチェックしている最善のものかどうかはわかりません。各カテゴリには独自のコントローラがあります(例:車、テレビ、ノートパソコン):車のコントローラは次のとおりです: 'app.controller( 'cars'、function($ scope、$ location){if($ location.path()= = 0 '/ cars/bmw') { $ scope.pageHeader = "BMW Cars"; $ scope.curentMenu = "CARS"; $ scope.title = My Car Collection BMW "; }}} ' など車カテゴリの各パスについて – calin24

+0

これらの' if'ステートメントで何をやっているのは良くありません。各ステートに対して 'state params'や' resolve'を使う方が良いでしょう。どのように私のソリューションを使用したかを示してください。コントローラを状態設定に追加すると、htmlから削除する必要があります。 – mbeso

0

ページの変更が成功するためには、$ locationChangeSuccessイベントを待機する必要があります。

このイベントが発生すると、コントローラの初期化時に実行する必要があるpageloadで実行するロジックを配置できます。

Scope.$on('$locationChangeSuccess', function() { $scope.initFunction() });

を使用して

コード

$rootScope.$on('$locationChangeSuccess', function() { 
    $scope.initFunction() 
}); 
0

が動作しているようです。私は、各catogoryためapp.jsで関数を作成し、タイトルの値を設定し、curentMenuとpageheader:

var initHeader_Cars = function($scope, $location){ 
    if($location.path() === '/cars/bmw') 
    { 
     $scope.pageHeader = "BMW Cars"; 
     $scope.curentMenu = "CARS"; 
     $scope.title = "My Car Collection BMW"; 
    } 
    if($location.path() === '/cars/audi') 
    { 
     $scope.pageHeader = "AUDI Cars"; 
     $scope.curentMenu = "CARS"; 
     $scope.title = "My Car Collection AUDI"; 
    } 
}; 

var initHeader_Laptops = function($scope, $location){ 
    if($location.path() === '/laptops/acer') 
    { 
     $scope.pageHeader = "ACER"; 
     $scope.curentMenu = "Laptops"; 
     $scope.title = "Acer Models"; 
    } 
}; 

をして、私は、各カテゴリのコントローラでlocationChangeSuccessイベントを使用:

app.controller('cars', function($scope, $location) { 
    // init vaules 
    initHeader_cars($scope, $location); 
    $scope.$on('$locationChangeSuccess', function() { 
     // when click the back button 
     initHeader_cars($scope,$location); 
    }); 
}); 
関連する問題