use*_*563 6 javascript scope angularjs typescript
我正在转换Angular应用程序以使用TypeScript,但这是一个普通的TypeScript问题,而不是Angular.角度js文件是沿着这条线:
(function () {
var app = angular.module('myModule', []);
app.controller('myController', ['$scope',
function ($scope) {
$scope.myNewProperty = "Bob";
}
]);
})();
Run Code Online (Sandbox Code Playgroud)
我已将其转换为可爱的TypeScript类语法:
class myController {
constructor($scope) {
$scope.myNewProperty = "Bob";
}
}
angular.module('myModule', []).controller("myController", myController);
Run Code Online (Sandbox Code Playgroud)
一切正常,除了生成的JS没有根据JS模块模式(即在外部匿名函数中)包装:
var myController = (function () {
app.controller('myController', ['$scope',
function ($scope) {
$scope.myNewProperty = "Bob";
}
]);
})();
var app = angular.module('myModule', []);
Run Code Online (Sandbox Code Playgroud)
所以myController现在是全球性的.如果我将类放在TypeScript模块中,那么js将使用模块名称作为全局变量生成:
var TsModule;
(function (TsModule) {
var myController = (function () {
app.controller('myController', ['$scope',
function ($scope) {
$scope.myNewProperty = "Bob";
}
]);
})();
var app = angular.module('myModule', []);
})(TsModule || (TsModule = {}));
Run Code Online (Sandbox Code Playgroud)
如何以这种方式阻止TypeScript污染全局范围?我只是希望它包含在一个很好的本地范围内.我已经看到它在别处说过"回到旧的JS语法"(即没有TypeScript类). 如何使用不污染全局范围的TypeScript类定义AngularJS服务?
但是我们使用TypeScript /的全部意义是/ class语法.TypeScript与任何知道不会走向全球的(明智的)JS程序员不一致吗?
你可以简单地将你的类包装在一个module
模块本身将是全局的,但是如果您不导出该类,则不必担心单个模块名称会污染全局范围。
所以这个打字稿:
module MyModule {
class MyClass {
constructor(){}
}
}
Run Code Online (Sandbox Code Playgroud)
会产生如下JS:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() {
}
return MyClass;
})();
})(MyModule || (MyModule = {}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |