Вызов модального окна в AngularJS Bootstrap UI с помощью JavaScript
используя пример, приведенный здесь, Как я могу вызвать модальное окно с помощью JavaScript вместо нажатия кнопки?
Я новичок в AngularJS и попытался найти документацию здесь и здесь без удачи.
спасибо
6 ответов:
хорошо, так что прежде всего http://angular-ui.github.io/bootstrap/ имеет
сделать угловой пользовательского интерфейса $модальные работать с Bootstrap 3, что вам нужно переопределить стили
.modal { display: block; } .modal-body:before, .modal-body:after { display: table; content: " "; } .modal-header:before, .modal-header:after { display: table; content: " "; }
(последние необходимы, если вы используете пользовательские директивы) и инкапсулировать html с
<div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4 class="modal-title">Modal title</h4> </div> <div class="modal-body"> ... </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog -->
открыть модальные окна с передачей данных в dialog
в случае если кому-то интересно передать данные в диалог:
app.controller('ModalCtrl', function($scope, $modal) { $scope.name = 'theNameHasBeenPassed'; $scope.showModal = function() { $scope.opts = { backdrop: true, backdropClick: true, dialogFade: false, keyboard: true, templateUrl : 'modalContent.html', controller : ModalInstanceCtrl, resolve: {} // empty storage }; $scope.opts.resolve.item = function() { return angular.copy( {name: $scope.name} ); // pass name to resolve storage } var modalInstance = $modal.open($scope.opts); modalInstance.result.then(function(){ //on ok button press },function(){ //on cancel button press console.log("Modal Closed"); }); }; }) var ModalInstanceCtrl = function($scope, $modalInstance, $modal, item) { $scope.item = item; $scope.ok = function () { $modalInstance.close(); }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); }; }
демо Plunker
веб-сайт AngularJS Bootstrap не был обновлен с последней документацией. Около 3 месяцев назад pkozlowski-opensource написал изменение, чтобы отделить $modal от $ dialog commit ниже:
https://github.com/angular-ui/bootstrap/commit/d7a48523e437b0a94615350a59be1588dbdd86bd
в этом коммите он добавил новую документацию для $modal, которую можно найти ниже:
надеюсь, что это помогает!
быстрый и грязный путь!
это не очень хороший способ, но для меня он кажется самым простым.
добавить тег привязки, который содержит модальный data-target и data-toggle, имеют идентификатор, связанный с ним. (Может быть добавлен в основном в любом месте в html-представлении)
<a href="" data-toggle="modal" data-target="#myModal" id="myModalShower"></a>
теперь
внутри углового контроллера, откуда вы хотите вызвать модальное просто использовать
angular.element('#myModalShower').trigger('click');
это будет имитировать нажатие на кнопку на основе углового кода и модальный появится.
другая версия, похожая на ту, которую предлагает Максим Шустин
мне понравился ответ, но часть, которая беспокоила меня, была использование
<script id="...">
как контейнер для шаблона модала.я хотел разместить шаблон модального в скрытом
<div>
и свяжите внутренний html с переменной области под названиемmodal_html_template
главным образом потому, что я считаю более правильным (и более удобным для обработки в WebStorm/PyCharm) разместить html шаблона внутри из<script id="...">
эта переменная будет использоваться при вызове
$modal({... 'template': $scope.modal_html_template, ...})
для того, чтобы связать внутренний HTML-код, я создал
inner-html-bind
это простая директивапроверить примерplunker
<div ng-controller="ModalDemoCtrl"> <div inner-html-bind inner-html="modal_html_template" class="hidden"> <div class="modal-header"> <h3>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 class="btn btn-primary" ng-click="ok()">OK</button> <button class="btn btn-warning" ng-click="cancel()">Cancel</button> </div> </div> <button class="btn" ng-click="open()">Open me!</button> <div ng-show="selected">Selection from a modal: {{ selected }}</div> </div>
:
app.directive('innerHtmlBind', function() { return { restrict: 'A', scope: { inner_html: '=innerHtml' }, link: function(scope, element, attrs) { scope.inner_html = element.html(); } } });