【发布时间】:2015-11-28 20:08:56
【问题描述】:
我有以下ui-router状态配置:
angular
.module('my_app', ['ui.router'])
.config(function($stateProvider, $urlRouterProvider, $locationProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
.state('main', {
abstract: true,
views: {
"header": {
templateUrl: "app/views/shared/header.html",
controller: "MainController",
controllerAs: "main"
},
"content": {
template: "<ui-view />"
}
},
resolve: {
mobile: mobileCheck
}
})
.state('main.home', {
url: '/',
templateUrl: 'app/views/templates/home.html',
controller: 'HomeController',
controllerAs: 'home',
})
.state('main.earn', {
url: '/earn',
templateUrl: 'app/views/templates/earn.html',
controller: "EarnController",
controllerAs: 'earn',
})
.state('main.vision', {
url: '/vision',
templateUrl: 'app/views/templates/vision.html',
controller: "VisionController",
controllerAs: "vision"
})
.state('main.contact', {
url: '/contact',
templateUrl: 'app/views/templates/contact.html',
controller: "ContactController",
controllerAs: "contact"
})
});
在这里,我有一个抽象的父状态main,每个子状态(main.home、main.earn 等)都是应用程序中的不同页面。
抽象状态的存在是为了使用一个通用模板,即标题,高于所有页面模板:
views: {
"header": {
templateUrl: "app/views/shared/header.html",
controller: "MainController",
controllerAs: "main"
},
"content": {
template: "<ui-view />"
}
}
对应的html如下:
<body ng-controller="MainController as main" ng-cloak>
<div ui-view='header'></div>
<div ui-view='content'></div>
<script src="app/app.js"></script>
<!-- AngularJS Controllers -->
<script src="app/controllers/mainController.js"></script>
<script src="app/controllers/homeController.js"></script>
<script src="app/controllers/earnController.js"></script>
</body>
header 命名视图是注入标头的位置,content 视图包含每个页面模板。
如您所见,我已经在整个文档的正文中定义了主控制器,并为特定页面模板指定了控制器别名,因此我应该能够在任何我能够确认的页面模板有效。
但是,在主控制器中访问我已解析的数据是行不通的。我可以访问每个页面模板,但不能访问主要的“父”控制器。每个页面控制器都通过了mobile 依赖项,然后它可以附加到this 用于检测移动/桌面环境。我宁愿能够在MainController 中接收mobile 依赖项,但是每当我尝试.controller('MainController', function(mobile) 时,我都会收到有关不正确依赖项注入的标准角度错误。
这让我相信解析数据正在解析到子状态(和控制器),而不是父控制器。我认为这是因为 1)父抽象状态没有 url 和 2)因为该状态的控制器是在主体上命名的,而不是在状态本身上。
我怎样才能将解析的数据作为依赖项解析到我的主控制器中?我尝试在状态配置中命名控制器,但没有效果。
【问题讨论】:
标签: javascript angularjs templates angular-ui-router