AngularJS和Typescript:显式控制器注册是否必要?

时间:2014-11-19 08:27:06

标签: angularjs controller typescript

在AngularJS中,您在AngularJS主模块中注册这样的控制器,使其远离全局范围:

  

我们为我们的应用程序创建了一个AngularJS模块myApp。然后我们添加   控制器的构造函数使用的模块   .controller()方法。这保持了控制器的构造函数   超出全球范围。   (https://docs.angularjs.org/guide/controller

app.controller("MyController", MyController);

使用TypeScript模块时是否还需要注册?

File1.ts:

module MyAngularApp {
    "use strict";
    export var app = angular.module("MyAngularApp", []);
}

File2.ts

module MyAngularApp {
    "use strict";

    export class MyController {
        constructor($scope) {
            $scope.models = {};
            $scope.models.helloAngular = "Hello Angular!";
        }
    }

    // Not Needed because of TypeScript Module?
    // MyAngularApp.app.controller("MyController", MyController);
}

HTML文件:

<html ng-app="MyAngularApp" ng-controller="MyAngularApp.MyController">
<head>
    <title ng-bind="models.helloAngular"></title>
</head>
<body>

    <input type="text" ng-model="models.helloAngular" />
    <h1>{{models.helloAngular}}</h1>

    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script>
    <script src="~/Scripts/File1.js"></script>
    <script src="~/Scripts/File2.js"></script>
</body>
</html>

此代码无需在模块中注册控制器即可工作,我没有污染全局范围。

为什么要在AngularJS主模块中注册控制器?还有其他好处吗?

1 个答案:

答案 0 :(得分:0)

  

此代码无需注册模块中的控制器即可工作,并且我没有污染全局范围。

不,不。您在全局范围MyController中拥有window或者您已在app.controller('MyController')的某处注册了它。

已更新基于更新:

因为你正在使用ng-controller="MyAngularApp.MyController Angular将在全局范围内查看MyAngularApp.MyController,它确实存在,因为那是内部模块所在的位置。这与app.controller("MyController", MyController);不同,实际上并不是必需的,因为您没有使用ng-controller="MyController"