Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Angularjs 当“时,父组件未传递给子组件”;要求;使用_Angularjs_Typescript - Fatal编程技术网

Angularjs 当“时,父组件未传递给子组件”;要求;使用

Angularjs 当“时,父组件未传递给子组件”;要求;使用,angularjs,typescript,Angularjs,Typescript,我试图将父组件的控制器的函数调用到子组件的控制器中。但是,父组件似乎没有在Init上注入到子组件的控制器中 在下面的代码片段中,我试图调用父组件(即nvPanel)控制器(即PanelController)在子组件控制器中的show方法: module AppExample { import ITimeoutService = angular.ITimeoutService; import ILogService = angular.ILogService; class

我试图将父组件的控制器的函数调用到子组件的控制器中。但是,父组件似乎没有在Init上注入到子组件的控制器中

在下面的代码片段中,我试图调用父组件(即
nvPanel
)控制器(即
PanelController
)在子组件控制器中的
show
方法:

module AppExample {
    import ITimeoutService = angular.ITimeoutService;
    import ILogService = angular.ILogService;

    class LegendController implements angular.IComponentController {

        private $timeout: ITimeoutService;
        private $log: ILogService;
        // Parent component reference
        panelComponent: PanelComponent;

        static $inject = [
            "$timeout",
            "$log",
        ];

        constructor(
            $timeout: ITimeoutService,
            $log: ILogService
        ) {
            this.$timeout = $timeout;
            this.$log = $log;
        }

        $onInit(): void {
            let controller = this.panelComponent.controller;
            controller.show();
        }
    }

    class LegendComponent implements angular.IComponentOptions {
        templateUrl = "/.../nv-legend.html";
        controller = LegendController;
        require: {
            panelComponent: "^nvPanel"
        };
    }

    angular.module("AppExample").component("nvLegend", new LegendComponent());
}
但是,
panelComponent
在onInit函数中未定义(即未被AngularJS注入),尽管它在组件的选项中被标记为“必需”

这就是父组件和子组件的使用方式:

<div>
    <nv-panel id="legendPanel">
        ...
        <div id="legend-container" class="slide-out-div">
            <nv-legend></nv-legend>
        </div>
        ...
    </nv-panel>
</div>
module AppExample { 
    export class PanelController {

        constructor(...) {
            ...
        }

        show(): void {
            ...
        }     
    }

    export class PanelComponent implements angular.IComponentOptions {
        controller = PanelController;
        templateUrl = "/client/features/shared/panel/nv-panel.html";
        transclude = true;
    }

    angular.module("AppExample").component("nvPanel", new PanelComponent());