我正在尝试将 angular-ui-router 与 angularAMD 一起使用,但有一件事我无法工作。
我有一个抽象状态(名为“first”)和另一个嵌套状态(名为“second”),它继承自“first”,并且包含一个带有 2 个视图的views键,每个视图都有自己的控制器和模板。
在 angularAMD repo (github.com/marcoslin/angularAMD/issues/62) 上,marcoslin 展示了一种方法,但我无法让它工作,因此我认为这不完全是我的情况:(
$stateProvider
.state('root', {
url: '',
abstract: true,
views: {
'header': angularAMD.route({
templateUrl: 'app/root/header.tpl.html',
controller: 'HeaderCtrl',
controllerUrl: 'HeaderCtrl'
}),
'footer': angularAMD.route({
templateUrl: 'app/root/footer.tpl.html',
controller:'FooterCtrl',
controllerUrl: 'FooterCtrl'
})
}
})
我正在以延迟加载的方式转换一些大项目,所以我认为问题可能来自仍未发现的副作用。我做了一个简单的 plunker 来检查它是否在更简单的环境中工作得更好,但它仍然不起作用。
本质上,我有问题的代码是这个:
$stateProvider
.state('first',
angularAMD.route({
abstract: true,
controllerUrl: 'first-controller',
templateUrl: 'first.tmpl.html',
controllerAs: 'first'
})
)
.state('first.second', {
url: '/introduction',
views: {
second1: angularAMD.route({
templateUrl: 'second1.tmpl.html',
controllerUrl: 'second1-controller',
controllerAs: 'second1'
}),
second2: angularAMD.route({
templateUrl: 'second2.tmpl.html',
controllerUrl: 'second2-controller',
controllerAs: 'second2'
})
}
});
请注意,我使用 angularAMD 提供的可能性来避免在 angularAMD.route() 方法中使用控制器键。如果您的控制器文件返回匿名函数,您可以执行此操作。
我的完整示例可以在这里找到: http ://plnkr.co/edit/5WBtd3R7k20yRkMazIuk?p=preview
编辑:我已经分叉了我的 Plunker,以展示当我尝试使用更传统的角度语法时会发生什么,而在加载我的控制器时不返回匿名函数。
所以控制器看起来像:
define(['app'], function (app) {
'use strict';
app.controller('Second1Controller', function () {
var vm = this;
vm.value = "Hello you ! I'm Number 2.1";
});
});
并且在 ui-router 中对 angularAMD 的调用更改如下(注意控制器键):
.state('first.second', {
url: '/introduction',
views: {
second1: angularAMD.route({
templateUrl: 'second1.tmpl.html',
controllerAs: 'second1',
controllerUrl: 'second1-controller',
controller: 'Second1Controller'
}),
second2: angularAMD.route({
templateUrl: 'second2.tmpl.html',
controllerUrl: 'second2-controller',
controllerAs: 'second2',
controller: 'Second2Controller'
})
}
});
在此处查看新的 Plunker:http://plnkr.co/edit/kPFBo7ssAtqAuiKdwnQ9?p= preview
这一次,当您没有加载您尝试使用的内容时,我会遇到通常的错误:
错误:[ng:areq] 参数“Second1Controller”不是函数,未定义
结束编辑
有人帮我吗?:)
干杯!
乔尔