2015-09-24 11 views
11

QAチームからのリクエストが届きました。私はうんざりしていると思います。ここでは、あなたが既に角度ベースのアプリケーションの「約」状態/ページにいると仮定し、上部のメニューから「約」状態のURLを再度クリックすると、「約」ページをリロードすることができます。 aboutページはどこからでもデータを取得しませんが、リロードは単に点滅と同じです。私の角度アプリで状態の設定についてはui.routerを使用したAngularJS:同じ状態リンクをクリックしたときのリロードページ

はこのようなものです:

.state('about', { 
    url: '/about', 
    templateUrl: '/path/to/about.html', 
    controller: 'aboutCtrl as aboutView' 
}); 

とTOPメニューで、我々はこの状態を指すリンクがあります。

<a ui-sref="about">About</a> 

を私は多くのことを試してみましたこれを有効にするには:リンクをクリックすると、同じ状態のリロードがトリガーされます。

リンクが静的であるため、$state.go('about', {}, {reload: true});または$state.transitionTo('about', {}, {reload: true});のようなものは機能しません。

'$stateChangeSuccess'イベントをリッスンしてrun位相のリロード対象を操作しようとしている最後の手段はありますが、クリックすると状態が変わらないため、動作しないと思いますあなたがその状態にいる間、'about'リンクをクリックします。

これを回避する方法はありますか?ありがとう

+4

「私はちょうど私がばかげて聞こえると思う私たちのQAチームからの要求を得ました」 - – scniro

+0

喜んであなたは良い笑いを得た私の一日のTYを作りました。私はそれがばかげた要求だと思うし、ui.routerとすることは不可能だと思う。私はある専門家が私を啓発するのを待っている。ありがとう – TonyGW

+1

私は、静的であると仮定している約ページをリロードすることはいくつかの理由のために行く良い方法だとは思わない - あなたのアプリは、ユーザーが既にそのページにいることを示すだけである。あなたが同じタブを何度も繰り返しクリックすると良い例がマテリアルデザインのアニメーションです - https://material.angularjs.org/latest/#/demo/material.components。タブ – JaKXz

答えて

17

オプション属性がありますがUI-SREF-optsの UIルータが付属していますと呼ばれます。私は同じ問題に直面し、それを解決しました。

例:<a ui-sref="home" ui-sref-opts="{reload: true}">Home</a>

ドキュメントURL:UI Router DOcs

+1

これは私のために働いた、ありがとう! – ChrisDevWard

+0

この問題のベストソリューション、ありがとう! –

7

あなたはそうです、私はstate change eventsをその状態で一度起動することはできません。それまで、そのAPIを使用してその機能を利用できるようになるのであれば、これは半分のハックな解決策です。私たちはちょうどng-clickを利用し、いくつかの愚かなロジックを使ってQAを和らげることができます(あなたの場合)。また、コントローラの実装についてはわかりません。この例では$rootScope.runに置きましたが、これを選択すると統合されます。

<a ui-sref="about" ng-click="sillyQA()">About</a> 

.run(['$rootScope', '$state', function($rootScope, $state) { 

    $rootScope.sillyQA = function() { 
     if($state.current.name === 'about') { 
      $state.go('about', {}, { reload: true }); 
     } 
    } 

    // -- just to see our about => about state 'change' 
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ 
     console.log('toState: ' + toState.name); 
     console.log('fromState: ' + (fromState.name || 'Just got there! click again!')); 
    }) 
}]); 

JSFiddle Link ...次の例を守っ - デモ

+0

ありがとう、うまく説明!私はQAからその要求を受け取ったとき、私はもっと苛立ちました。リロードが必要な場合、ユーザーはいつでもブラウザーウィンドウを更新できます。同じリンクを再度クリックしてリロードすることはできません。 LOL – TonyGW

+0

@TonyGWどこから来ているのか聞いてます!私は、SOに関する最新の質問など、一定の飼料が存在する状況を想像することしかできません。明示的にブラウザをリフレッシュするのではなく、フィードを「リフレッシュ」したい場合は、一日中ロゴをクリックできます。いずれにせよ幸せなコーディングと私はこれが助けることができたことをうれしく思います:) – scniro

+0

実際には、ページにはユーザー入力のためのフォームが含まれています。どこからでもデータを受け取ることはありません。 QAの人々は私を時々夢中にします... – TonyGW

関連する問題