我正在使用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
答案 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
元素。
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>