javascript - AngularJS 组件 - 带有 Typescript 的 ngModelController

标签 javascript angularjs typescript components directive

我有以下(简化的)指令,我想用 Typescript 编写它(仍然不是 Angular 2.0)。

 angular
        .module('app.components')
        .directive('list', List);

    function List() {
        return {
            restrict: 'E',
            templateUrl: 'modules/components/List/List.html',
            controller: ListController,
            controllerAs: 'vm',
            require: ['ngModel', '?^form'],
            bindToController: true,
            link: LinkFunction,
            scope: {
                'id': '@',
                'name': '@'
            }
        };

        function LinkFunction(scope, element, attrs, controllers) {
            var ngModelCtrl = controllers[0];
            var formCtrl = controllers[1];

            ngModelCtrl.$isEmpty = function(value) {
                return !value || value.length === 0;
            };

            ngModelCtrl.$render = function() {
                scope.vm.form = formCtrl;
                scope.vm.model = ngModelCtrl;
                scope.vm.selected = ngModelCtrl.$modelValue;
            };

            // ... more controller functions
    }
})();

现在,如何将 Controller 注入(inject)到我的 Typescript 代码中:

const template = require('./List.html');

export default class ListComponent{
    static selector = 'list';
    static definition: ng.IComponentOptions = {
        template: template,
        controller: ListComponent,
        bindings: {
            'id': '@',
            'name': '@'
        }
    };

    id;
    name;

    constructor(private controllers) {  // <-- not working
        'ngInject';
    }

    $onInit() {
        let ngModelCtrl = this.controllers[0];
        let formCtrl = this.controllers[1];

        ngModelCtrl.$isEmpty = function(value) {
            return !value || value.length === 0;
        };

        ngModelCtrl.$render = function() {
            this.model = ngModelCtrl;
            this.form = formCtrl;
            this.selected = ngModelCtrl.$modelValue;
        };
    }
}

希望有人知道答案,或者可以给我提示如何实现我的目标,因为我在网上搜索了几个小时,但没有找到任何解决方案。

最佳答案

使用“require”,如此处所述 https://docs.angularjs.org/guide/component 请参阅组件间通信

关于javascript - AngularJS 组件 - 带有 Typescript 的 ngModelController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650515/

相关文章:

javascript - 隐藏没有闪光的元素

javascript - 按值更改字体颜色

javascript - 在运行时动态分配 ng-controller

javascript - mgcrea.ngStrap.select onSelect 回调不起作用

typescript - TypeScript 中的无渲染 Vue 组件

javascript - 如何将元素的背景位置更改为新的 CSS 属性?

javascript - 我如何从 js 为 html 输出一个变量

javascript - 强制点击空链接不移动页面焦点

javascript - 使用 Angular4 水平滚动 div

使用对象参数的 TypeScript 条件返回类型和默认值