在其他文件中设置ng.IModule控制器

时间:2015-01-05 20:28:47

标签: javascript angularjs typescript

我有以下JavaScript,我想转换为TypeScript,但我很惊讶:(

JS

var app = angular.module('app', []);
app.config([...]);
app.run([...];

(function (ng, app) {
  app.controller('appCtrl', [..., function(...)])
})(angular, app);

这是我到目前为止所做的。

TS

File1中:

/// <reference path="../Scripts/typings/angularjs/angular.d.ts" />
module App {
    "use strict";
    var mod:ng.IModule = angular.module(name, []);
}

文件2:

/// <reference path="../Scripts/typings/angularjs/angular.d.ts" />
module App {
    'use strict';
    export interface IAppCtrlScope extends ng.IScope {
        greeting: string;
        changeName(name): void;
    }
    export class AppCtrl {
        public static $inject = [
            '$scope'
        ];
        constructor(private $scope: IAppCtrlScope) {
            $scope.greeting = 'asdf';
            $scope.changeName = (name) => {
                $scope.greeting = 'Hello ' + name + ' !';
            }
        }
    }
    mod.controller('appCtrl', AppCtrl); // this doesn't work
}

在定义控制器的文件中执行mod.controller('appCtrl', AppCtrl)的原因是因为它更容易维护。

2 个答案:

答案 0 :(得分:1)

所以解决方案非常简单。我所要做的就是导出变量。

module Application {
    'use strict';
    export var angularApp: ng.IModule = angular.module("app", []);
}

module Application {
    'use strict';
    export interface IAppCtrlScope extends ng.IScope {
        greeting: string;
        changeName(name): void;
    }
    export class AppCtrl {
        public static $inject = [
            '$scope'
        ];
        constructor(private $scope: IAppCtrlScope) {
            $scope.greeting = 'asdf';
            $scope.changeName = (name) => {
                $scope.greeting = 'Hello ' + name + ' !';
            }
        }
    }
    angularApp.controller('appCtrl', AppCtrl)
}

答案 1 :(得分:0)

我会使用一个类作为控制器。有关示例,请参阅https://youtube.com/watch?v=WdtVn_8K17E&hd=1