我有一个组件:
0
使用基本控制器:
import template from './login.html';
import controller from './login.controller';
import './login.less';
let loginComponent = {
restrict: 'E',
bindings: {
redirect: '@'
},
template,
controller,
controllerAs: 'vm'
};
export default loginComponent;
问题是import angular from 'angular';
let LoginController = [
'AuthService',
'$resource',
'$state',
'config',
(AuthService, $resource, $state, config) => {
var vm = {
redirect: ''
};
var initialize = () => {
if (AuthService.authenticated()) {
loginSuccess();
}
};
var loginSuccess = () => {
console.log(vm.redirect);
if (vm.redirect) {
$state.go(vm.redirect);
}
};
initialize();
return vm;
},
];
export default LoginController;
属性在构造时(调用redirect
方法时)不可用。如何在控制器构造期间访问此属性?如果没有办法,那么观看此属性变为可用的最佳方法是什么,然后调用initialize
函数?
initialize
正是我想要的方法。这是未来用户的更正控制器:
$onInit
答案 0 :(得分:3)
由于Angular指令链接的工作原理,您无法访问控制器构造中的绑定。
它将在link
函数in指令中,在组件中(这是指令的糖语法)可用魔法$onInit
controller method:
在元素上的所有控制器都有后,在每个控制器上调用 已经构建并初始化了它们的绑定(并在之前 前& post链接此元素指令的函数)。这个 是一个为控制器提供初始化代码的好地方。
列出的控制器的问题在于它使用箭头功能而不是常规功能。控制器是控制器构造函数的实例,并提供this
上下文。
无需发明initialize
方法,现在应为this.$onInit
。