在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主模块中注册控制器?还有其他好处吗?
答案 0 :(得分:0)
此代码无需注册模块中的控制器即可工作,并且我没有污染全局范围。
不,不。您在全局范围MyController
中拥有window
或者您已在app.controller('MyController')
的某处注册了它。
已更新基于更新:
因为你正在使用ng-controller="MyAngularApp.MyController
Angular将在全局范围内查看MyAngularApp.MyController
,它确实存在,因为那是内部模块所在的位置。这与app.controller("MyController", MyController);
不同,实际上并不是必需的,因为您没有使用ng-controller="MyController"
。