Angular 1.5 组件 - 从指令转换后未呈现模板

Angular 1.5 component - template not rendered after converting from directive

我有一个正在工作的 Angular 指令 (myUser)。它是在 AngularJS 1.5 项目中定义的,使用 TypeScript 是这样的(我直接在指令中分配控制器)。指令 (myUser) 正在链接到它的父模块(您可以在下面的代码示例底部看到它 - 您需要滚动)

class myUser {

    controller: any;
    templateUrl: string;
    controllerAs: string;

    constructor() {
        this.controller = myCtrl;
        this.controllerAs = 'ctrl';
        this.templateUrl    = '/mytemplate.html';
    }
    static userFactory() {
        var instance = new myUser();
        return instance;
    }
}


class myCtrl {

    global: any;
    mySrv: any;
    username: any;
    focus: boolean;

    static $inject = ['MyDependency', 'MyService'];

    constructor(UserInfo, mySrv) {
        this.global     = UserInfo;
        this.mySrv    = mySrv;
        this.myData   = this.global ? this.global.myData : false;
        this.focus      = false;
    }

    check() {
        if(this.myData){
            return true;
        };
        return false;
    }

    signIn(model) {
        this.mySrv.signIn(model);
    }

    signOut() {
        this.mySrv.signOut();
    }
}

class myOtherDir {
     ... other directive definition
}

class myOtherCtrl {
     ... other controller definition
}

angular
    .module('shared.myNavigation', [])
    .directive('myUser', myUser.userFactory)
    .directive('myOtherDir', myOtherDir.dirFactory)
    .controller('myOtherCtrl', myOtherCtrl)

当我运行应用程序时,指令被替换为/mytemplate.html的内容:

html ... <my-user></my-user> => 替换为模板标记

当我将指令更改为组件时,像这样使用 Angular 1.5 组件 API,我的 HTML 中的组件声明不再被模板标记替换:

angular
    .module('shared.myNavigation', [])
    .component('myUser', myUser.userFactory)
    .directive('myOtherDir', myOtherDir.dirFactory)

没有错误,唯一改变的是我现在将其作为组件而不是指令链接到模块。我已经检查了我的代码,我相信它应该与组件 API 完全兼容。有什么明显的我想念的吗?我用 Google 搜索了几乎所有我能找到的类似问题,但我不确定哪里出错了。

我不太清楚为什么,但是我没有调用静态 userFactory 函数来创建一个 class 实例,我需要在连接组件时直接创建实例,如下所示:

angular
    .module('shared.myNavigation', [])
    .component('myUser', new myUser())

如果有人能解释为什么需要这样做,加分。

很抱歉让这个重新出现,但我刚刚在我的项目中遇到了这个确切的问题,并且在没有 类 的情况下解决了。

似乎组件注册函数采用函数 expression 而不是指令注册中的函数 reference 。因此,在提供问题的源代码中,只需在注册中添加括号即可执行并注册组件。

我刚刚做了一个组件转换指令(没有 类 只是常规 javascript)并且它被修复了。

angular
.module('shared.myNavigation', [])
.component('myUser', myUser.userFactory()) /*Converting to expression*/
.directive('myOtherDir', myOtherDir.dirFactory)