如何将控制器注入 Config 内的状态对象? (ui-路由器)
How to inject a Controller into state object inside of Config? (ui-router)
下面我尝试将 PlatformCtrl 注入我的 $stateProvider 对象:
app.js
"use strict";
module.exports = angular.module('tickertags', [
'templateCache',
'headers', // headers (platform, view, timespan)
'tickertags-auth', // authentication / authentication_module.js
'settings', // settings
'tags', // tags / tags_module.js
'tickers', // tickers / tickers_module.js
'ui.mask', // https://github.com/angular-ui/ui-mask
'ui.router', // https://github.com/angular-ui/ui-router
'ui.bootstrap' // https://github.com/angular-ui/bootstrap,
])
.config([
'$stateProvider',
'$urlRouterProvider',
'PlatformCtrl',
function(
$stateProvider,
$urlRouterProvider,
PlatformCtrl) {
//...
const platformHeader = {
name: 'platformheader',
templateUrl: "headers/platform/platform_header.html",
controller: PlatformCtrl,
controllerAs: "ph",
transclude: true,
bindings: {
ticker: '<',
startEpoch: '<',
endEpoch: '<',
timespan: '<',
feed_open: '<'
}
};
$stateProvider
.state(login)
.state(password)
.state(passwordReset)
.state(settings)
.state(settingsDefault)
.state(settingsAlerts)
.state(platformHeader);
出现以下错误:
Failed to instantiate module tickertags due to:
Error: [$injector:unpr] Unknown provider: PlatformCtrl
platform_header_component.js
module.exports = angular
.module('headers')
.controller('PlatformCtrl', PlatformCtrl);
PlatformCtrl.$inject = [
'api',
'$element'];
function PlatformCtrl(
api,
$element) {
//....
我要避免的是必须将每个组件的所有控制器代码放在我的 app.js > 配置 space:
中
$stateProvider.state('tags', {
parent: 'tickers',
url: "/:ticker",
views: {
'tagsPanel@': {
template: '<p>Tags for {{$ctrl.ticker}}</p>',
controllerAs: '$ctrl',
bindToController: true,
controller: function($stateParams) {
this.$onInit = function() {
console.info('Tags Panel 2 $onInit');
this.ticker = $stateParams["ticker"];
}
}
}
}
});
^ 我的 app.js 会很大,无论如何控制器都应该模块化。
首先,控制器在配置阶段不可用。第二件事是控制器不可用于 DI,它们是用 $controller
服务实例化的。
是
controller: 'PlatformCtrl',
...
下面我尝试将 PlatformCtrl 注入我的 $stateProvider 对象:
app.js
"use strict";
module.exports = angular.module('tickertags', [
'templateCache',
'headers', // headers (platform, view, timespan)
'tickertags-auth', // authentication / authentication_module.js
'settings', // settings
'tags', // tags / tags_module.js
'tickers', // tickers / tickers_module.js
'ui.mask', // https://github.com/angular-ui/ui-mask
'ui.router', // https://github.com/angular-ui/ui-router
'ui.bootstrap' // https://github.com/angular-ui/bootstrap,
])
.config([
'$stateProvider',
'$urlRouterProvider',
'PlatformCtrl',
function(
$stateProvider,
$urlRouterProvider,
PlatformCtrl) {
//...
const platformHeader = {
name: 'platformheader',
templateUrl: "headers/platform/platform_header.html",
controller: PlatformCtrl,
controllerAs: "ph",
transclude: true,
bindings: {
ticker: '<',
startEpoch: '<',
endEpoch: '<',
timespan: '<',
feed_open: '<'
}
};
$stateProvider
.state(login)
.state(password)
.state(passwordReset)
.state(settings)
.state(settingsDefault)
.state(settingsAlerts)
.state(platformHeader);
出现以下错误:
Failed to instantiate module tickertags due to: Error: [$injector:unpr] Unknown provider: PlatformCtrl
platform_header_component.js
module.exports = angular
.module('headers')
.controller('PlatformCtrl', PlatformCtrl);
PlatformCtrl.$inject = [
'api',
'$element'];
function PlatformCtrl(
api,
$element) {
//....
我要避免的是必须将每个组件的所有控制器代码放在我的 app.js > 配置 space:
中$stateProvider.state('tags', {
parent: 'tickers',
url: "/:ticker",
views: {
'tagsPanel@': {
template: '<p>Tags for {{$ctrl.ticker}}</p>',
controllerAs: '$ctrl',
bindToController: true,
controller: function($stateParams) {
this.$onInit = function() {
console.info('Tags Panel 2 $onInit');
this.ticker = $stateParams["ticker"];
}
}
}
}
});
^ 我的 app.js 会很大,无论如何控制器都应该模块化。
首先,控制器在配置阶段不可用。第二件事是控制器不可用于 DI,它们是用 $controller
服务实例化的。
是
controller: 'PlatformCtrl',
...