控制器和服务可以变成类。
我喜欢使用$inject
,这样就可以安全地进行缩小,但这行是可选的。
class ModalInstanceController {
static $inject = ["$scope", "$modalInstance", "$userService"];
constructor($scope, $modalInstance, $userService) {
$scope.ok = () => {
$modalInstance.close();
};
$scope.cancel = () => {
$modalInstance.dismiss('cancel');
};
}
}
.controller('ModalInstanceCtrl', ModalInstanceController);
包括
$inject
与使用原生JavaScript中的数组语法等效:
.controller('ModalInstanceCtrl', ["$scope", "$modalInstance", "$userService", function ($scope, $modalInstance, $userService) { ... }]);
在真实的应用中,我喜欢避免使用$scope
,除了像$watch
这样实际需要它的东西以外,这种情况下我会把方法也提取出来。不过,这需要你改变你的HTML。
class ModalInstanceController {
private $modalInstance : any;
static $inject = ["$modalInstance", "$userService"];
constructor($modalInstance, $userService) {
this.$modalInstance = $modalInstance;
}
ok() {
this.$modalInstance.close();
}
cancel() {
this.$modalInstance.dismiss('cancel');
};
}
然后在你的HTML中,
<button type="button" ng-click="ModalInstanceCtrl.ok()">OK</button>
请注意使用了完全限定名的
ModalInstanceCtrl.ok()
,因为它不再仅仅漂浮在作用域中。
由于看到你有
$userService
,所以我来分享一下使用TypeScript的好处。
class UserService {
parse(arg : string) {
return parseInt(arg);
}
}
class ModalInstanceController {
private $modalInstance : any;
private $userService : UserService;
static $inject = ["$modalInstance", "$userService"];
constructor($modalInstance, $userService : UserService) {
this.$modalInstance = $modalInstance;
this.$userService = $userService;
}
ok() {
var arg = this.$userService.parse("12");
this.$modalInstance.close();
}
cancel() {
this.$modalInstance.dismiss('cancel');
};
}
app.service("$userService", UserService);
app.controller("ModalInstanceCtrl", ModalInstanceController);