【发布时间】:2016-07-12 02:56:47
【问题描述】:
我之前使用过 ng-route 并且效果很好,但是使用 UI Router,链接不再可点击,或者至少大部分时间都不可点击。当它们是非常随机的时,它们不会显示我正在使用的 html 模板。
HTML:
<head>
<title>Tutorial</title>
<script src="lib/angular/angular.js"></script>
<script src="lib/angular/angular-ui-router.min.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
</head>
<body>
<ng-view></ng-view>
<ul class="menu">
<li><a ui-sref="view1">view1</a></li>
<li><a ui-sref="view2">view2</a></li>
</ul>
.js
angular.module('myApp', [
'myApp.controllers',
'ui.router'
]);
angular.module('myApp').config(function($stateProvider, $urlRouterProvider) {
$stateProvider.state('view1',{
url: '/view1',
controller:'Controller1',
templateUrl:'/view1.html'
}).state('view2', {
url: '/view2/:firstname/:lastname',
controller: 'Controller2',
resolve: {
names: function() {
return ['Misko', 'Vojta', 'Brad'];
}
},
templateUrl: '/view2.html'
});
$urlRouterProvider.otherwise('/view1');
});
angular.module('myApp.controllers', []).controller('Controller1', function($scope, $location, $state) {
$scope.loadView2=function() {
$state.go('view2', {
firstname: $scope.firstname,
lastname: $scope.lastname
});
};
}).controller('Controller2', function($scope, $stateParams, names) {
$scope.firstname = $stateParams.firstname;
$scope.lastname = $stateParams.lastname;
$scope.names = names;
});
我正在按照关于 AngularJS 的 SitePoint 电子书中的说明进行操作,所以我不确定自己做错了什么或错过了什么。
【问题讨论】:
-
我在你的标记中没有看到
ui-view,所以你的状态视图很可能没有被渲染和注入 -
@JAAulde 我应该使用它而不是 ng-view 还是与它结合使用?
-
一个
ui-view应该存在于您的主 HTML 文件中。您的顶级状态将在那里渲染和注入。你不应该需要ng-view。状态可以有子状态,每个具有子状态的状态模板都应该有一个ui-view,其渲染的子状态将被注入。 -
太好了,谢谢!现在工作正常。
-
查看
ui-router的自述文件以了解如何使用它:github.com/angular-ui/ui-router/blob/master/README.md。此外,他们有一个很好的演示应用程序,您可以下载并查看它,它确实帮助我了解了这个状态路由引擎的内容以及如何使用它。
标签: angularjs angular-ui-router