【问题标题】:Bootstrap 3 modal in html5mode in AngularjsAngularjs中html5mode中的Bootstrap 3模态
【发布时间】:2013-11-24 23:58:22
【问题描述】:

html5Mode(true) 中使用引导模式。

在第一次单击时单击 launch demo modal 时,不会出现更改为 /#myModal 的 url。

再次单击launch demo modal 时,会出现模式。

在普通模式下($locationProvider.html5Mode(false); 模态出现在第一次点击时。

如何让模态框出现在第一次点击中?

标准模态代码:-

<!-- Button trigger modal -->
  <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-lg">Launch demo modal</a>

  <!-- Modal -->
  <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
      <div class="modal-content">

        <div class="modal-body">
          ...
        </div>

      </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
  </div><!-- /.modal -->

角度代码:-

var myApp = angular.module('myApp', []);

myApp.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
  $routeProvider.
      when('/', {
        templateUrl: 'partials/home',
        controller: 'homePage'
      }).
      otherwise({redirectTo: '/login'});

    $locationProvider.html5Mode(true);
}]);

经检查,第一次单击launch demo modal 时页面会刷新,但刷新不会通过服务器进行。 Angular 做到了这一点。同样,在第二次单击时,angular 也会管理 REST 请求并显示模态。

PS:- 我想演示这个问题,但 plunkr 在 html5Mode 下不起作用。

据我所知,我无法向jsfiddle 添加额外的 html 页面,但你不能。此外我不确定它是否支持$locationProvider.html5Mode(true); 模式。

我去哪里演示错误?

【问题讨论】:

  • 也许你可以看看 Angular-UI 的 Bootstrap 指令 (angular-ui.github.io/bootstrap/#/modal)。有一个用于模态的。
  • 上次我检查它有严重问题stackoverflow.com/questions/18205329/…
  • 他们发布了一个新版本,因为你看过它。他们重新设计了 $modal 提供程序(也取消了 $dialog)。我制作了一个工作 Plunker 来向您展示如何一起使用 AngularJS 1.0.8、AngularUI 0.6.0 和 Bootstrap 3.0。

标签: twitter-bootstrap angularjs twitter-bootstrap-3 bootstrap-modal


【解决方案1】:

这里是 plunker:http://plnkr.co/edit/WLJfs8axxMJ419N2osBY?p=preview

它没有像 Bootstrap 示例中那样使用 data-toggle 属性,而是使用 ng-click 指令来触发控制器中实例化模态的函数。

我直接使用 Bootstrap (Bootstrap Modal Live Demo) 中的模态示例,并将其改编为 AngularUI (AngularUI Modal Demo) 中的 javascript 示例。

使用的版本

  • AngularJS 1.0.8
  • AngularUI 0.6.0
  • 引导程序 3.0.0

结果

index.html(部分)

<div ng-controller="ModalDemoCtrl">
    <button class="btn" ng-click="open()">Open me!</button>
    <div ng-show="selected">Selection from a modal: {{ selected }}</div>
</div>

modal.html

<div class="modal-dialog">
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" ng-click="cancel()">&times;</button>
      <h4 class="modal-title">Modal title</h4>
    </div>
    <div class="modal-body">
      <ul>
        <li ng-repeat="item in items">
          <a ng-click="selected.item=item">{{item}}</a>
        </li>
      </ul>
      <div>Selected Item: {{selected.item}}</div>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" ng-click="cancel()">Close</button>
      <button type="button" class="btn btn-primary" ng-click="ok()">Save changes</button>
    </div>
  </div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

app.js

angular.module('plunker', ['ui.bootstrap']);

var ModalDemoCtrl = function ($scope, $modal, $log) {

  $scope.items = ['item1', 'item2', 'item3'];

  $scope.open = function () {

    var modalInstance = $modal.open({
      templateUrl: 'modal.html',
      controller: ModalInstanceCtrl,
      resolve: {
        items: function () {
          return $scope.items;
        }
      }
    });

    modalInstance.result.then(function (selectedItem) {
      $scope.selected = selectedItem;
    }, function () {
      $log.info('Modal dismissed at: ' + new Date());
    });
  };
};

var ModalInstanceCtrl = function ($scope, $modalInstance, items) {

  $scope.items = items;
  $scope.selected = {
    item: $scope.items[0]
  };

  $scope.ok = function () {
    $modalInstance.close($scope.selected.item);
  };

  $scope.cancel = function () {
    $modalInstance.dismiss('cancel');
  };
};

此外,还有一个用于模态可见性的小 CSS 修复。

.modal {
    display: block;
}

【讨论】:

  • 关闭时不会褪色。在以前的版本中,我曾经添加一些属性以使其在关闭时具有淡化效果,例如backDropFade: true,但是在此版本中我找不到。而且突然消失了,不爽。
  • 你应该知道AngularUI并不完全支持Bootstrap 3.0
  • 是不是就这样关闭了?我不能在关闭时添加效果吗?
  • 当然可以,但你必须自己做,或者等到新版本的 AngularUI 并希望它得到支持。
猜你喜欢
  • 2013-11-06
  • 2013-09-08
  • 2013-12-29
  • 2015-07-11
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2015-02-25
相关资源
最近更新 更多