2017-08-22 59 views
1

我正在尝试使用打字稿来编写angularjs,但我现在被卡住了。我有一个名为AgeService的服务。该服务有一个名为calculateAge的函数。即时通讯调用它到我的控制器,但我得到一个错误写在下面。如何在控制器中使用角度服务 - TypeScript

SERVICE.TS

var servicesModule = angular.module('services', []); 
class AgeService { 
    static AngularDependency = [AgeService]; 
    constructor(private $scope: ng.IScope) { 

    } 
    public calculateAge(birthdate: string) { 
     var today = new Date(); 
     var dob = new Date(Date.parse(birthdate)); 

     var years = today.getFullYear() - dob.getFullYear(); 
     if (today.getMonth() < dob.getMonth() || (today.getMonth() == dob.getMonth() && today.getDate() < dob.getDate())) 
      years -= 1; 
     return years; 
    } 
} 

servicesModule.service('ageService', AgeService.AngularDependency) 

CONTROLLER.TS

var controllersModule = angular.module('controllers', []); 
class PersonController { 
    static AngularDependency = ['$scope', PersonController, 'ageService']; 

    constructor(private $scope: PersonScope, private ageService: AgeService) { 
     this.initController(); 
    } 

    private initController() { 
     this.$scope.name = 'Berkin'; 
     this.$scope.person = { 
      name: 'Berkin', 
      dob: '25-06-1995' 
     }; 
     this.$scope.person.age = this.ageService.calculateAge(this.$scope.person.dob); 
    } 

} 

controllersModule.controller('personController', PersonController.AngularDependency); 

HTML

<h4 ng-controller="personController">{{name}} {{person.age}}</h4> 

ERROR

Error

谢谢...

+1

为什么你在角2中使用角1? –

+0

我猜他没有在角度2中使用角度1;它的角1只是写在TS中,他应该最终在他的index.html – Rahul

+0

中引用.js文件为什么'PersonController.AngularDependency'只有'PersonController'应该正常工作? – Rahul

回答

0

SOLUTION

首先,我总结我的代码到模块,@Rahul说。

之后,我省略了“PersonController”变量到AngularDependency数组中。

将“服务”模块导入到“控制器”模块中以创建AgeService。

现在一切正常。

CONTROLLER.TS

module Application.Controller { 
import Services = Application.Services; 

class PersonController { 
     static AngularDependency = ['$scope', 'ageService']; 
     ageService: Application.Services.AgeService; 
     constructor(private $scope: PersonScope, ageService: Application.Services.AgeService) {   
      this.ageService = ageService; 
      this.initController(); 
     } 

     private initController() { 
      this.$scope.name = 'Berkin'; 
      this.$scope.person = { name: 'Berkin', dob: '01-01-1995' }; 
      this.$scope.person.age = this.ageService.calculateAge(this.$scope.person.dob); 
     } 
    } 
} 

SERVICES.TS

module Application.Services { 
    var servicesModule = angular.module('services', []); 

    export class AgeService { 
     static AngularDependency = [AgeService]; 

     public calculateAge(birthdate: string) { 
      var today = new Date(); 
      var dob = new Date(Date.parse(birthdate)); 
      var years = today.getFullYear() - dob.getFullYear(); 
      if (today.getMonth() < dob.getMonth() || (today.getMonth() == dob.getMonth() && today.getDate() < dob.getDate())) 
       years -= 1; 
      return years; 
     } 
    } 

    servicesModule.service('ageService', AgeService); 
} 

如果这些步骤是不够的你,请告诉我。谢谢

0
App.filter('ageFilter', function() { 
    //<input type="text" ng-model="employee.birthday | ageFilter" class="form-control" disabled/> 
    function calculateAge(birthday) { // birthday is a 
     var birthday = new Date(birthday); 
     var NOW = Date.now(); 
     var ageDifMs = NOW - birthday.getTime(); 
     var ageDate = new Date(ageDifMs); // miliseconds from epoch 
     return Math.abs(ageDate.getUTCFullYear() - 1970); 
    } 
    function monthDiff(d1, d2) { 
     if (d1 < d2){ 
     var months = d2.getMonth() - d1.getMonth(); 
     return months <= 0 ? 0 : months; 
     } 
     return 0; 
    } 

    return function(birthdate) { 
     if(angular.isUndefined(birthdate) || birthdate instanceof Date){ return ""; }else{ 

      return calculateAge(birthdate); 
     } 
    }; 
}); 
相关问题