2015-08-28 71 views
0

我一直在编码Angular大约一年,并取得了很大的进步。现在,每个人都在对TypeScript大喊大叫。这个主题有很多教程和博客,但似乎没有任何一致性。这个app.js文件应该如何在TypeScript中查看?将我的Angular代码转换为TypeScript

angular.module('angular10App', [ 
'ngCookies', 
'ngResource', 
'ngSanitize', 
'ui.router', 
'ui.bootstrap', 
'ngStorage', 
'cfp.loadingBar', 
'ngAnimate' 
]) 
.config(function ($stateProvider, $urlRouterProvider, $locationProvider) { 

$urlRouterProvider 
     .otherwise('/'); 

    $locationProvider.html5Mode(true); 
}); 

该控制器应该如何查看?我宁愿保持范围,所以让我们假设在路由配置中有'Controller as vm'。

angular.module('angular10App') 
.controller('ResultsCtrl', function ($scope, $stateParams, results) { 

    $scope.flightType = $stateParams.flightType; 
    $scope.selectedAirportDep = $stateParams.from; 
    $scope.selectedAirportRet = $stateParams.to; 
    $scope.depDate = $stateParams.depDate; 
    $scope.arrDate = $stateParams.arrDate; 
    $scope.class = $stateParams.class; 
    $scope.adults = $stateParams.adults; 
    $scope.children = $stateParams.children; 

    $scope.results = results; 
}); 

回答

1

注册的模块的基本相同

angular.module('angular10App', [ 
'ngCookies', 
'ngResource', 
'ngSanitize', 
'ui.router', 
'ui.bootstrap', 
'ngStorage', 
'cfp.loadingBar', 
'ngAnimate' 
]) 
.config($stateProvider: ng.ui.IStateProvider, 
      $urlRouterProvider: ng.ui.IUrlRouterProvider, 
      $locationProvider: ng.ILocationProvider) { 
    $urlRouterProvider.otherwise('/'); 
    $locationProvider.html5Mode(true); 
} 

作为控制器,它应该被定义为一类

module controllers { 
    export interface IYourScope extends ng.IScope { 
     someField: boolean; 
     someOtherField: string; 
    } 

    export class yourController { 
     constructor(private $scope: IYourScope) { 
      $scope.someField = true; 
      $scope.someOtherField = "something"; 
     } 
    } 
} 

altough我喜欢更多使用controllerAs和然后访问控制器类的属性(我猜它会导致稍后迁移到Angular 2.0),有些类似于:

module controllers {  
    export class yourController { 

     public someField: boolean; 
     public someOtherField: string; 

     constructor(private $scope: ng.IScope) 
      this.someField = true; 
      this.someOtherField = "something"; 
     } 
    } 
} 

,那么你可以注册这个控制器一如既往

angular.module('yourModule').controller('ctrl',controllers.yourController); 
+0

如果该模块被包裹在类似:模块应用{} – AngularBoy

+0

这取决于你如何设计你的应用程序,打字稿是不是一个独立的语言,它是一个超过JavaScript的超集,所以你只能使用它的一部分,它会没事的。我的方法是拥有一个具有模块注册的bootstrap.ts文件。并且不要忘记获取角度的类型定义文件。 –

+0

你有GitHub或BitBucket上的任何代码我可以看看吗? – AngularBoy