これは何度も取り上げられており、ほとんどの記事で次のコードが参照されています: AngularJS のカスタム URL を使用したモーダル ウィンドウ
しかし、私はそれを理解していません。私はそれが非常に明確であるとはまったく思いません。私はまた、これがURLを追加せず、戻るボタンを使用してモーダルを閉じることを可能にすることを除いて、実際には素晴らしく、非常に役立つこのjsfiddleを見つけました。
編集:これは私が助けを必要としているものです。
それでは、私が達成しようとしていることを説明してみましょう。新しいアイテムを追加するフォームがあり、「新しいアイテムを追加」リンクがあります。「新しい項目を追加」をクリックすると、作成したフォーム「add-item.html」が表示されたモーダルがポップアップ表示されます。これは新しい状態なので、URL は /add-item に変わります。フォームに入力してから、保存するか閉じるかを選択できます。閉じる、モーダルを閉じます :p (奇数) . ただし、モーダルを閉じて前のページ (状態) に戻るためにクリックすることもできます。 モーダルを実際に機能させるのにまだ苦労しているので、この時点で Close の助けは必要ありません。
これは私のコードです。
ナビゲーション コントローラー: (これはモーダル関数を配置する正しい場所でもありますか?)
angular.module('cbuiRouterApp')
.controller('NavbarCtrl', function ($scope, $location, Auth, $modal) {
$scope.menu = [{
'title': 'Home',
'link': '/'
}];
$scope.open = function(){
// open modal whithout changing url
$modal.open({
templateUrl: 'components/new-item/new-item.html'
});
// I need to open popup via $state.go or something like this
$scope.close = function(result){
$modal.close(result);
};
};
$scope.isCollapsed = true;
$scope.isLoggedIn = Auth.isLoggedIn;
$scope.isAdmin = Auth.isAdmin;
$scope.getCurrentUser = Auth.getCurrentUser;
$scope.logout = function() {
Auth.logout();
$location.path('/login');
};
$scope.isActive = function(route) {
return route === $location.path();
};
});
これは私がモーダルをアクティブにする方法です:
<li ng-show='isLoggedIn()' ng-class='{active: isActive("/new-item")}'>
<a href='javascript: void 0;' ng-click='open()'>New Item</a>
</li>
new-item.html:
<div class="modal-header">
<h3 class="modal-title">I'm a modal!</h3>
</div>
<div class="modal-body">
<ul>
<li ng-repeat="item in items"><a ng-click="selected.item = item">{{ item }}</a></li>
</ul>Selected:<b>{{ selected.item }}</b>
</div>
<div class="modal-footer">
<button ng-click="ok()" class="btn btn-primary">OK</button>
<button ng-click="close()" class="btn btn-primary">OK</button>
</div>
また、これはモーダルを開きますが、それを解決できなかったため、閉じません。