0

このように、1 つの定数パラメーター (ページ)、1 つの動的パラメーター (id)、1 つのクエリ パラメーター (日付) で状態を定義しました。

   $stateProvider.state('test', {
   url: '/page/:id?date',
   controller: 'MyCtrl'       
 });

このようなクエリパラメーターを渡して、コントローラーからこの状態を呼び出しています

$state.go("test", {id: '5',date:'06/09/2016'});

この状態を呼び出した後、パラメーターを取得しています。

console.log($stateParams.id) -> '5';
console.log($stateParams.date) -> '06/09/2016'(as expected results)

繰り返しますが、このようにクエリ パラメータを渡さずに、コントローラーから同じ状態を呼び出しています。

$state.go("test", {id: '7'});

今、私は以下のstateparamsを取得しています

console.log($stateParams.id) -> '7';(expected)
console.log($stateParams.date) -> '06/09/2016';(which shouldn't be right here.)

$stateParams.date は、状態の呼び出し中に渡さなかったため、未定義にする必要があります。しかし、デフォルトでは URL に渡されていました。オプションのパラメータだったので、渡さない間は無視する必要があります。パラメータを渡さずに同じ状態を再度呼び出しながら「未定義」にする方法は? $stateParams.date=null とか別の名前を渡せば反映されると思います。しかし、ルーターのURLを介して渡す必要はありませんか? これを達成する他の方法はありますか?

更新 1: 投稿された回答の後、期待される結果として「{inherit:false}」を使用しました。しかし、状態の呼び出し中に渡されなかったパラメーター値は継承されませんでした。しかし、オプションのパラメーター値だけを継承したくありません。以下のコードを参照してください。

  $stateProvider.state('test', {
   url: '/page/:id/:type?date',
   controller: 'MyCtrl'       
 });

ここでは、パラメータ ID とタイプを動的にする必要があります。id のみの更新された値で呼び出したと仮定すると、型は継承されません。しかし、日付(条件付きParam)の値ではなく、type paramの値を継承したいのです。

$state.go("test", {id: '3'},{inherit:false});

console.log($stateParams.type) -> undefined.(ここで、'type' パラメーター値を渡さずに継承する必要があります。とにかくこれを達成するには?

4

1 に答える 1