2016-06-06 15 views
1

Ich habe folgende (vereinfachte) Direktive, und ich möchte es mit Typescript schreiben (immer noch nicht Angular 2.0).AngularJS Komponente - ngModelController mit Typescript

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 
    } 
})(); 

Nun, wie kann ich die Controller in meinen Typoskript-Code zu injizieren:

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; 
     }; 
    } 
} 

Hoffnung jemand kennt die Antwort oder kann mir einen Tipp geben, wie mein Ziel zu erreichen, weil ich das Web durchsucht, für Stunden, fand aber keine Lösung dafür.

+0

thx für Ihre Antwort, aber ich weiß, wie AngularJS mit Typoskript (Todd Motto Style Guide) zu schreiben, aber ich weiß nicht, wie ngModelController zu injizieren in mein Komponente (wie im alten angularjs Code) – CodeNashor

+0

Haben Sie es geschafft, die benötigten Controller zu injizieren? –

Antwort

Verwandte Themen