无法打开引导模式窗口作为路由

时间:2013-12-14 16:29:12

标签: javascript angularjs

我正在使用bootstrap来显示模态,并希望它在点击锚标记时显示为路径。 但我得到一个模块错误&似乎无法弄清楚如何解决它。

HTML

<div ng-view>
    <div ng-controller="DetailPageCtrl">
      <a href="#/profile">Click here to open modal!</a>
    </div>
    <script type="text/ng-template" id="modalContainer">
        <div ng-controller="ProfileModalCtrl"></div>
    </script>
</div>

JS

var app = angular.module('plunker', ['ui.bootstrap']);
app.config(function($routeProvider) {
   $routeProvider
      .when('/profile', {
          templateUrl : 'modalContainer',
          controller : 'ProfileModalCtrl'
      });
})
app.controller('DetailPageCtrl', function($scope) {
   console.log("detail page");
});
app.controller('ProfileModalCtrl', function($scope, $modal) {
    $modal.open({templateUrl : 'modal.html'});
});

plnkr中的代码: http://plnkr.co/edit/VbvuWzLqkICFzBYI9sL5?p=preview

2 个答案:

答案 0 :(得分:8)

演示受到问题的困扰。你没有包括angular-route.js。您没有使用otherwise提供默认路径,而是将html放在ng-view

/* include script tag with `angular-route.js , then inject as dependency*/
var app = angular.module('plunker', ['ui.bootstrap', 'ngRoute']);
app.config(function($routeProvider) {
  $routeProvider.when('/', {
    templateUrl: 'default'
  })
    .when('/profile', {
      templateUrl: 'modalContainer',
      controller: 'ProfileModalCtrl'
    }).otherwise({
      redirectTo: '/'
    })
});
<div ng-view><!-- leave empty --></div>

DEMO

你也会遇到一些问题,在路由配置中声明标记中的ng-controller ...选择一个或另一个

答案 1 :(得分:1)

您的plunker缺少ngRoute依赖项。在较新版本的angular中,ngRoute是一个单独的库,需要单独包含并声明为模块依赖项到您的app模块:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.js"></script>
<script src="http://code.angularjs.org/1.2.4/angular-route.js"></script>
var app = angular.module('plunker', ['ngRoute', 'ui.bootstrap']);

此外,您的路线尚未完全定义。

此外,您的模板(<script type="text/ng-template">)是在<div ng-view>元素中定义的。 ng-view是一个指令,它将在解析路径时替换主机div元素的内容,因此模板的更好位置超出了ng-view元素。

Fixed PLUNKER

var app = angular.module('plunker', ['ngRoute', 'ui.bootstrap']);

app.config(function($routeProvider) {
 $routeProvider
  .when('/profile', {
    templateUrl : 'modalContainer',
    controller : 'ProfileModalCtrl'
  })
  .when('/detail', {
    templateUrl : 'detail.html',
    controller : 'DetailPageCtrl'
  })
  .otherwise({redirectTo: '/detail'});
});

app.controller('DetailPageCtrl', function($scope) {
 console.log("detail page");
});

app.controller('ProfileModalCtrl', function($scope, $modal) {
  $modal.open({templateUrl : 'modal.html'});
});
<!doctype html>
<html ng-app="plunker">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.js"></script>
    <script src="http://code.angularjs.org/1.2.4/angular-route.js"></script>

    <script src="http://angular-ui.github.com/bootstrap/ui-bootstrap-tpls-0.7.0.js"></script>

    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
  </head>
  <body>

    <div ng-controller="DetailPageCtrl">
      <a href="#/profile">Click here to open modal!</a>
    </div>

    <script type="text/ng-template" id="modalContainer">
        <div ng-controller="ProfileModalCtrl"></div>
    </script>

    <div ng-view></div>

</body>
<script src="script.js"></script>
</html>