Javascript AngularJS:访问指令中的控制器属性';s链接函数
我正在使用TypeScript并创建一个控制器来将Javascript AngularJS:访问指令中的控制器属性';s链接函数,javascript,angularjs,asynchronous,typescript,angular-promise,Javascript,Angularjs,Asynchronous,Typescript,Angular Promise,我正在使用TypeScript并创建一个控制器来将rootScope数据传递给指令的link函数,虽然它可以返回整个控制器,但我无法访问控制器的属性。我可能错过了一些很明显的东西,但就是看不见 指示 class-annualperf控制器{ 宽度:任意; 高度:数字; 字体大小:数字; 资料页:布尔; 数值:数字[]; 构造函数(私有作用域:ng.IScope,根作用域:ng.IRootScopeService){ rootScope.$on('DataUpdated',()=>{ this.f
rootScope
数据传递给指令的link函数,虽然它可以返回整个控制器,但我无法访问控制器的属性。我可能错过了一些很明显的东西,但就是看不见
指示
class-annualperf控制器{
宽度:任意;
高度:数字;
字体大小:数字;
资料页:布尔;
数值:数字[];
构造函数(私有作用域:ng.IScope,根作用域:ng.IRootScopeService){
rootScope.$on('DataUpdated',()=>{
this.factsheet=window.location.pathname.indexOf('factsheet')>-1;
this.height=this.factsheet?260:400;
this.width=this.factsheet?250:空;
this.fontSize=this.factsheet?9:11;
此参数的值=[
根范围['annualizedPerf']['y1_值'],
根范围['annualizedPerf']['y3_值'],
根范围['annualizedPerf']['y5_值'],
根范围['annualizedPerf']['y10_值']
];
});
}
}
AnnualPerfController.$inject=['$scope','$rootScope',“$element”];
导出函数annualPerformance():ng.IDirective{
返回{
限制:“C”,
替换:正确,
控制器:年度控制器,
controllerAs:“年度绩效”,
模板:“不工作”,
作用域:{},
链接:(范围、元素、属性、ctrl)=>{
log('values',scope.$eval(ctrl['values']);
log('ctrl',ctrl');
}
}
}
有趣的是链接
功能;第一个console.log
返回未定义,而第二个返回整个控制器,如下所示:
这正是我想要的。例如,如何访问value
键及其值
作为警告,这是从承诺返回的数据(如果有帮助)为什么使用
范围。$eval
?实际上没有原因,只是一个测试。使用或不使用First:not needed$eval,next:link在创建控制器之前调用,产生相同的结果。这就是为什么在创建控制器之后,它如何返回整个控制器?因为您在创建控制器之后展开它,chrome控制台只需尝试显示实际的对象值
class AnnualPerfController {
width: any;
height: number;
fontSize: number;
factsheet: boolean;
values: number[];
constructor(private scope: ng.IScope, rootScope: ng.IRootScopeService) {
rootScope.$on('DataUpdated', () => {
this.factsheet = window.location.pathname.indexOf('factsheet') > -1;
this.height = this.factsheet ? 260 : 400;
this.width = this.factsheet ? 250 : null;
this.fontSize = this.factsheet ? 9 : 11;
this.values = [
rootScope['annualizedPerf']['y1_value'],
rootScope['annualizedPerf']['y3_value'],
rootScope['annualizedPerf']['y5_value'],
rootScope['annualizedPerf']['y10_value']
];
});
}
}
AnnualPerfController.$inject = ['$scope', '$rootScope', "$element"];
export function annualPerformance(): ng.IDirective {
return {
restrict: 'C',
replace: true,
controller: AnnualPerfController,
controllerAs: 'annualPerformance',
template: '<div id="annual" style="margin: 0 auto">not working</div>',
scope: {},
link: (scope, element, attr, ctrl) => {
console.log('values', scope.$eval(ctrl['values']));
console.log('ctrl', ctrl);
}
}
}