在内部模块中定义/使用angularjs控制器

时间:2015-05-17 13:34:37

标签: angularjs typescript visual-studio-2015

我使用Typescript 1.4和angularjs 1.3.6。

使用带有webessentials的VS 2015 RC,没有模块系统(没有 - 模块标志)

我有一个工作代码,如下所示:

demoModule.ts

module Demo.Test {
'use strict';


(() => {
    var app = angular.module('Demo.Test', []);


    // Routes.
    app.config([
        '$stateProvider', $stateProvider => {

            $stateProvider
                .state('demo', {
                url: '/demo',
                templateUrl: '/views/test/demo.html',
                controller: 'demoController as vm'
            });
        }
    ]);
})();

demoController.ts

module Demo.Test {
    'use strict';
    export class DemoController {
        constructor(/* ... */) { /* ... */}
    }
    angular.module('Demo.Test').controller('demoController', Demo.Test.DemoController);
}

但是当我移动这一行时:

angular.module('Demo.Test').controller('demoController', Demo.Test.DemoController);

到demoModule.ts文件(见下文)它将编译,但在运行时出现JS错误:

  

错误:[ng:areq] Argument' demoController'不是一个功能,未定义

我知道如何让它发挥作用?我的意思是这样的:

module Demo.Test {
'use strict';


(() => {
    var app = angular.module('Demo.Test', []);
    angular.module('Demo.Test').controller('demoController', Demo.Test.DemoController);

    // Routes.
    app.config([
        '$stateProvider', $stateProvider => {

            $stateProvider
                .state('demo', {
                url: '/demo',
                templateUrl: '/views/test/demo.html',
                controller: 'demoController as vm'
            });
        }
    ]);
})();

2 个答案:

答案 0 :(得分:2)

如果您使用的脚本引用不是正确的顺序,那么您将得到运行时错误 as:错误:[ng:areq] Argument' demoController'不是一个功能,未定义

在html文件中的demoModule.ts之前添加demoController.ts。

<script src="demoController.js"></script>
<script src="demoModule.js"></script>

答案 1 :(得分:1)

它与文件的订购有关。在TypeScript中使用--out引起的一个众所周知的错误:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md#runtime-errors