このように、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' パラメーター値を渡さずに継承する必要があります。とにかくこれを達成するには?