我正在构建一个具有不同模块的应用程序。两个模块可以有相同的页面。所以基于url我正在进行适当的ajax调用来加载数据。所以我想以下面的方式设置我的状态:
$stateProvider.state('login', {
url: '/login',
templateUrl: 'login.html',
controller: 'LoginController as LoginController'
}).state('logout', {
url: '/logout',
templateUrl: '',
controller: 'LogoutController as LogoutController'
}).state('module', {
url: '/:module',
params: {
module: DataService.getCurrentModule()
}
}).state('module.cover', {
url: '/cover',
templateUrl: 'cover.html',
params: {
module: 'leads'
}
}).state('module.leads', {
url: '/leads',
templateUrl: 'leads.html',
controller: 'LeadsController as ctrl',
abstract: true
})
鉴于在登录时我将获取所有模块并将其保存在正在发生的DataService中。登录后,将完成两件事。我用以下方式格式化的一个导航网址:
<a href={'#/'+ module.code +"/" + (menu.type|| menu)}>
<i className={classes}></i> <span >{menu.name || menu }</span>
</a>
正在设置正确的网址,第二个在app.js中设置&#34;运行&#34;我正在检查登录是否已完成我正在做的事情: $ location.path(DataService.getCurrentModule()+&#34; /&#34; +(home.type || home));
这也正在发生,但问题是所需的控制器和html页面没有被加载。我在这里错过了一些东西。或者我应该做些不同的事情?
提前感谢您的帮助。
答案 0 :(得分:0)
使用href
时请避免使用ui.router
。要导航到所需的状态,请使用:
ui-sref="myStateName({param1: 1, param2: 2})"
$state
并执行:$state.go('myStateName', {param1: 1, param2: 2});
在您的情况下,假设$ scope中的数组中有2个模块:
$scope.myModules = [{code: 'modA'},{code: 'modB'}];
现在在HTML中,转到module.cover
状态,你会这样做:
<a ui-sref="module.cover({module: myModules[0].code})">My Link</a>
如果要对所有模块执行此操作,请将其放在ng-repeat
:
<a ng-repeat="mod in modules" ui-sref="module.cover({module: mod.code})">My Link</a>
此外,对于状态配置,请考虑:
module
没有模板,因此它永远不会起作用。为其定义模板就像template: '<div ui-view></div>'
params
属性进行定义。仅在您需要不希望在URL