angular ui路由器-多次使用相同的templateUrl和控制器
angular ui router - using the same templateUrl and controller multiple times
我第一次使用AngularUI Router框架,想知道如何改进下面的代码。
基本上,这一切都很好,但最终(在我正在进行的项目中)会有20个或更多的问题,我不想说同样的"templateUrl"&控制器’。
以下是我的意思的精简版本:
index.html
<div ui-view></div>
问题.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的小/可管理性。
干杯
只需使用此处描述的URL参数https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-参数
然后您可以有一个状态,例如:
.state('question', {
url: '/:questionID',
templateUrl: 'questions.html',
controller: 'questionsCtrl'
});
您可以使用需要注入控制器的$stateParams
访问questionID
。
在聊天中进行了一些讨论后,我们能够使用状态参数构建一个函数型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;
});
聊天记录在https://chat.stackoverflow.com/transcript/60150
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 从控制器继承了隔离的作用域以生成可重用的指令
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 如何从控制器动态更改指令的templateUrl
- AngularJS:templateUrl 在控制器空闲之前呈现
- angular ui路由器-多次使用相同的templateUrl和控制器
- Angular.js控制器"在templateUrl/template ng-click/blur/focus
- AngularJS:在控制器接收到所有数据后加载templateUrl
- 如何在加载templateUrl之前执行控制器