Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:访问指令中的控制器属性';s链接函数_Javascript_Angularjs_Asynchronous_Typescript_Angular Promise - Fatal编程技术网

Javascript AngularJS:访问指令中的控制器属性';s链接函数

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

我正在使用TypeScript并创建一个控制器来将
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);
        }
    }
}