绝对在$ mdSidenav上键入角度材料错误

时间:2015-11-17 06:49:12

标签: angularjs typescript angular-material

试图找出切换$mdSidenav时出错的原因。这不是一个突破性错误,因为代码运行应该,但我觉得我可能在打字稿中错误地实现它。

我添加了明确的类型和角度材质,使用简单的控制器,如此

module app.layout {
interface IMenuModel {
    menuItems: app.layout.IMenuItems[];
    toggleSidenav(menuId: string): void; 
}

class MenuCtrl implements IMenuModel {

    menuItems: app.layout.IMenuItems[];

    constructor(private $mdSidenav: ng.material.ISidenavObject) {
        var vm = this;
    }

    toggleSidenav(menuId: string): void {
        this.$mdSidenav(menuId).toggle();
        console.log(menuId);
    }
  }

  angular.module("app").controller("menuCtrl", MenuCtrl);
}

代码的核心编译为

     MenuCtrl.prototype.toggleSidenav = function (menuId) {
          this.$mdSidenav(menuId).toggle();
          console.log(menuId);
     };

html是

<md-button ng-click="vm.toggleSidenav('left')" hide-gt-sm class="md-icon-button"> 
  menu  
</md-button>

所以这在浏览器中有效,菜单会切换。但是,IDE中有一个错误说明

enter image description here

我觉得我没有实现这个&#34;打字稿&#34;如果你愿意的话。明确键入的ng.material.ISidenavObject看起来像这样

 interface ISidenavObject {
    toggle(): angular.IPromise<void>;
    open(): angular.IPromise<void>;
    close(): angular.IPromise<void>;
    isOpen(): boolean;
    isLockedOpen(): boolean;
}

1 个答案:

答案 0 :(得分:3)

只需更改

constructor(private $mdSidenav: ng.material.ISidenavObject) {

constructor(private $mdSidenav: ng.material.ISidenavService) {

您可以看到相应的definition