【发布时间】:2015-10-11 06:35:05
【问题描述】:
我正在尝试将 angular-ui-router 与 angularAMD 一起使用,但有一件事我无法正常工作。
我有一个抽象状态(名为“first”)和另一个嵌套状态(名为“second”),它继承自“first”,并且包含一个 views 键和 2 个视图,每个视图都有它自己的控制器和模板。
在 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() 方法中使用 controller 键。如果你的控制器文件返回一个匿名函数,你可以这样做。
我的完整示例可以在这里找到: 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 的调用更改如下(注意 controller 键):
.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' 不是函数,得到 未定义
结束编辑
有人帮我吗? :)
干杯!
乔尔
【问题讨论】:
-
似乎在 plnkr 上工作。一次加载所有视图模板。或者这不是预期的行为?
-
视图已加载,但 second1-controller 和 second2-controller 未加载 :(
-
使用
angular.controller(...)代替return function () { ... };是否有效?可能最好坚持下去。 -
我用另一个使用
angular.controller(...)方式的 plunker 更新了我的帖子。仍然没有加载文件:(错误是不同的,但出于同样的原因,我猜......
标签: angularjs angular-ui-router angular-amd