为了帮助大家看清这个问题,我创建工作笨蛋 http://plnkr.co/edit/rIOrc31Crd62p5SC5cef?p=preview,它确实使用与上述状态类似的定义:
var AccountParentState = {
url: "/Account",
views: { '' :
{ template: 'Account state <hr/><div ui-view=""></div>',} },
stickA: true,
},
AccountAddState = {
url: "/add",
//views: addaccountview,
templateUrl: 'tpl.html',
controller: "account-controller",
resolve: {
Name: function() {
return "Joydeep";
}
}
};
$stateProvider
.state('account', AccountParentState)
.state("account.add", AccountAddState)
工厂和控制器:
.factory('account', function(){return {}})
.factory('plugin-factory', function(){return {}})
.controller('account-controller',
['$scope', '$state', "account", "plugin-factory", "Name"
, function($scope, $state, account, plugins, Name) {
console.log(Name);
}
])
这是有效的,因为控制器是由UI-Router
,作为状态转换的一部分。
另一方面,如果我们用这个扩展这个例子(参见分叉损坏版本 http://plnkr.co/edit/yaOUNhzRK2ci2I8vQAyA?p=preview) index.html 中的行(在状态定义之外)
<div ng-controller="account-controller"></div>
<div ui-view=""></div>
就会出现这个问题。为什么?因为现在控制器是not由管理UI-Router
。它不是由其基础设施注入的,也不是提供配置值的'Name'
。这是“朴素的棱角”风格。
检查工作解决方案here http://plnkr.co/edit/rIOrc31Crd62p5SC5cef?p=preview和破碎的here http://plnkr.co/edit/yaOUNhzRK2ci2I8vQAyA?p=preview