Angular ui路由器根据路由参数呈现不同的组件
Angular ui-router render different component based on route params
使用Angular UI Router,我试图基于$state.params
值呈现不同的组件,但我找不到一种干净的方法。
我已经找到了一个可行的解决方案(带有一些ES2015的幻想(,但这远不是最佳的:
/* ----- chapter/chapter.controller.js ----- */
class ChapterController {
constructor($state) {
this.$state = $state;
this.chapterNb = this.$state.params.chapterNb;
}
}
ChapterController.$inject = ['$state'];
export default ChapterController;
/* ----- chapter/chapter.controller.js ----- */
import controller from './chapter.controller';
const ChapterComponent = {
controller,
template: `
<chapter-01 ng-if="$ctrl.chapterNb === 1"></chapter-01>
<chapter-02 ng-if="$ctrl.chapterNb === 2"></chapter-02>
` // and more chapters to come...
};
export default ChapterComponent;
/* ----- chapter/index.js ----- */
import angular from 'angular';
import uiRouter from 'angular-ui-router';
import ChaptersComponent from './chapters.component';
import ChaptersMenu from './chapters-menu';
import Chapter from './chapter';
const chapters = angular
.module('chapters', [
uiRouter,
ChaptersMenu,
Chapter
])
.component('chapters', ChaptersComponent)
.config($stateProvider => {
'ngInject';
$stateProvider
.state('chapters', {
abstract: true,
url: '/chapters',
component: 'chapters'
})
.state('chapters.menu', {
url: '/menu',
component: 'chaptersMenu'
})
.state('chapters.chapter', {
url: '/{chapterNb:int}',
component: 'chapter'
});
})
.name;
export default chapters;
问题是每个<chapter-0*>
组件都非常不同,这就是为什么它们都对应于自己的模板。我想找到一种方法来自动引用与$state.params.chapterNb
相对应的章节组件,而不必为每个组件编写ng-if
。
有什么方法可以简化这一点吗?或者可能有一个特定的功能用于此目的?
如果不向组件传递任何数据,我认为您可以执行如下操作。
const ChapterComponent = {
controller,
template: ($state) => {
return ['<chapter-', $state.chapterNb, '></chapter-', $state.chapterNb, '>'].join("")
}
};
另一种方法是,您可以为每个chapter
&有一些URL约定。之后,您可以使用component
的templateUrl
函数或src
的ng-include
指令来呈现这些模板。
正如Pankaj Parkar在回答中所建议的那样,使用模板函数在这里会有所帮助。
经过一些调整,我已经能够实现基于$state.params
加载正确的组件,所以这里是我的解决方案,记录在案(查看第一篇文章中涉及的其他文件(:
import controller from './chapter.controller';
const ChapterComponent = {
controller,
template: ($state) => {
'ngInject';
return `
<chapter-0${$state.params.chapterNb}></chapter-0${$state.params.chapterNb}>
`;
}
};
export default ChapterComponent;
相关文章:
- 如何在react路由器的组件中使用参数
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 一个组件如何在 React 中将自己作为参数传递
- 消费者如何在 Angular 2 中提供组件构造函数参数
- 如何从组件外部访问路由参数
- 角度中的组合框(选择组件)不基于参数设置显示值
- 在 foreach 中使用 $data for 组件参数进行挖空
- 将参数传递给React Native中的组件
- 为什么需要重新打开组件类来指定位置参数
- 将组件html的值作为参数传递
- 如何将参数传递给ember组件
- ReactJS组件PropTypes——用一组参数指定一个函数类型
- 在reactjs中,从父组件调用并传递参数给子组件的函数
- 从其他组件获取参数[React JS]
- 将参数传递给组件
- react-router是如何通过props传递参数给其他组件的?
- 配置子组件函数,将多个参数传递给父函数
- -父组件回调如何通过子道具接收参数顺序/值
- 当改变url参数时,React路由器不会重新加载组件
- 余烬子组件通过父组件更新来自查询参数的属性