1

我试图弄清楚为什么不能从自己的组件的控制器中找到.component()具有指令的 Angular。<md-sidenav>Angular 抛出以下错误:

找不到句柄菜单的实例

整个组件是:

function controller($mdSidenav) {
    $mdSidenav("menu").open();
}
controller.$inject = ["$mdSidenav"];

components.component("sideAppMenu", {
    controller: controller,
    controllerAs: "model",
    templateUrl: "path/to/template"
});

...它的模板是:

<md-sidenav class="md-sidenav-left md-whiteframe-z2" md-component-id="menu">
    hello world
</md-sidenav>

如果我将整个移动<md-sidenav>到我的index.html(即在任何指令/组件之外),$mdSidenav可以找到整个 Angular Material 组件。

这里出了什么问题?我错过了一些细节吗?

我可以确认整个组件都已渲染。即模板定位注入成功

更新

我可以弄清楚问题出在哪里:它与组件生命周期有关。如果我$timeout在到达控制器代码后尝试访问所谓的 Angular Material 组件,$mdSidenav 可以找到该组件

function controller($mdSidenav, $timeout) {
    $timeout(function() {
        // OK!!!!!!!!
        $mdSidenav("menu").open();
        debugger;
    },3000);
}
controller.$inject = ["$mdSidenav", "$timeout"];

如果问题是何时访问组件,如果是在初始化控制器时,我应该何时尝试访问 Angular Material 组件?

4

1 回答 1

1

md-is-locked-open <md-sidenav>我可以使用指令/组件属性解决我的问题。

因为我只是想锁定为整个应用程序的生命周期打开的菜单,这对我来说很好。

我怀疑 Angular Material 开发人员没有涵盖我的用例,而是在视图已经加载并且您执行一个click或任何事件后需要服务的情况......

顺便说一句,我将把这个问答开放给新的答案,这样我们就可以理解为什么我的方案不起作用......

于 2015-12-23T11:16:47.793 回答