我第一次使用AngularUI路由器框架,并想知道如何改进下面的代码。
基本上这一切都很好但最终(在我正在进行的项目中)会有20个或更多的问题,我不想说同样的' templateUrl' &安培; '控制器'对于每个州。
下面是我的意思的缩小版本:
的index.html
<div ui-view></div>
questions.html
<a ui-sref="q1">q1</a>
<a ui-sref="q2">q2</a>
<div ng-show="$state.current.name === 'q1'">q1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere.</div>
<div ng-show="$state.current.name === 'q2'">q2. Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</div>
app.js
angular.module('foo', ['ui.router'])
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('q1', {
url: '/',
templateUrl: 'questions.html',
controller: 'questionsCtrl'
})
.state('q2', {
url: '/q2',
templateUrl: 'questions.html',
controller: 'questionsCtrl'
});
})
.controller('questionsCtrl', function($scope, $state) {
$scope.$state = $state;
});
;
我想遵循最佳做法,并尽可能保持app.js的小/可管理性。
干杯
答案 0 :(得分:2)
只需使用此处所述的网址参数https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-parameters
然后您可以拥有如下状态:
.state('question', {
url: '/:questionID',
templateUrl: 'questions.html',
controller: 'questionsCtrl'
});
您可以使用questionID
访问需要注入控制器的$stateParams
。
答案 1 :(得分:1)
在聊天中进行了一些讨论后,我们能够使用状态参数构建功能plunker。
HTML:
<a ui-sref="question({questionID:'q1'})">q1</a>
<a ui-sref="question({questionID:'q2'})">q2</a>
{{questionID}}
<div ng-show="questionID == 'q1'">q1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere.</div>
<div ng-show="questionID == 'q2'">q2. Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</div>
app.js:
.state('question', {
url: '/:questionID',
templateUrl: 'questions.html',
controller: 'questionsCtrl'
})
.controller('questionsCtrl', function($scope, $stateParams) {
//$scope.$state = $state;
$scope.questionID = $stateParams.questionID;
});
聊天的成绩单位于http://chat.stackoverflow.com/transcript/60150