これは、ネストされた状態onEnter
を持ち、コールバックを使用してモーダルをトリガーすることで実現できます。
$stateProvider
.state('contacts', {
url: '/home',
templateUrl: 'home.html',
controller: function($scope, MyService){
$scope.contacts = MyService.getContacts();
}
})
.state('contacts.details', {
url: "^/details/:id", // using the absolute url to not have the "/home" prepended
onEnter: function($state, $uibModal) {
var modal = $uibModal.open({
templateUrl: 'details.html',
controller: function($scope, $stateParams, MyService) {
// get data from service by url parameter
$scope.contact = MyService.getContact($stateParams.id);
}
});
modal.result.finally(function() {
$state.go('^'); // activate the parent state when modal is closed or dismissed
});
}
});
この手法は、ui-router の FAQ で説明されています。
ここでプランク。この例では、モーダルのスコープは - の子として作成され、スコープが渡されない場合の$rootScope
デフォルトの動作です。$uibModal
この場合、モーダルのコントローラーでサービスを使用して、url パラメーターでデータを取得する必要があります。
マスター URL と詳細 URL を次のようxyz.com/home
にするには、子状態でxyz.com/detail/123
絶対 URL ( ) を使用する必要があります。^/details/:id
このソリューションを使用すると、詳細 URL を直接開いても、マスターと詳細の両方の状態が適切にアクティブ化されているため、詳細 URL を共有できます。