AngularJS and javascript oop
AngularJS and javascript oop
我正在angularjs中开发大型前端应用程序。
我想知道这种方法是否可以用于angularjs,以及是否存在漏洞、性能问题或其他缺点。
控制器中的第一个代码
function ServiceHandler() {
var self = this;
self.init();
}
ServiceHandler.prototype = {
constructor : ServiceHandler,
request : undefined,
init : function(){
self.callService();
},
createRequest : function() {
self.request = {};
self.request = Service.getRequest();
},
callService : function() {
self.iAmLoading = true;
self.createRequest();
Service.callService(self.request).then(function(response) {
self.iAmLoading = false;
if (angular.isDefined(response) && angular.isDefined(response.data)) {
self.handleRequest(response);
}
}, function(error) {
self.handleSystemError(error);
});
},
handleRequest : function(response) {
if (angular.isUndefined(self.response)) {
self.response = {};
}
if (angular.isUndefined(response.data)) {
self.handleError(response);
}else {
self.response = response.data;
}
},
handleSytemError : function(error) {
// show 404
},
handleError : function(response) {
// think on what to do with your response
}
}
然后我用控制器初始化方法将其绑定
$scope.init(){
$scope.myServiceHandler = new ServiceHandler(); // in this manner i call the service first time because the constructor call the init method on my ServiceHandler object also
}
我将其与绑定在dom中
<div ng-controller="myController" ng-init="init()">
在html中,我可以用以下内容引用我的响应:
{{myServiceHandler.response.myResponseProperty}}
如果我想召回我的服务,我可以:
<button ng-click='myServiceHandler.callService()'></button>
就我个人而言,我认为这种结构的优点是代码的组织,而且这种结构似乎更面向项目,实现更有趣
让我知道你的想法。谢谢和问候Antonio
PS-我为这个问题写了这个代码,我写得很快,我认为这是有效的,但我不是100%肯定的,它没有经过测试:)我已经写过其他类似的控制器,它们现在正在生产中,似乎工作得很好。
PS2-教我英语,我现在正在学习,我现在在Duolingo上只有1500 xp:):)
据我所知,如果采用这种方法,您可以使用Angular's Service Provider
。除了每次调用具有代码为$scope.myServiceHandler = new ServiceHandler();
的作用域的控制器时,您实际上想要创建新的object
。我怀疑您的ServiceHandler
构造函数是否是必要的,因为对于Anggular's controllers
方法,我更喜欢使用singleton而不是构造函数,因为控制器通常调用不止一次。
我建议在控制器上使用工厂,而不是硬编码的服务处理程序,通常服务是您可以在应用程序上重用的代码和功能,所以如果您正在开发一个巨大的前端应用程序,我会将该服务设置为工厂。
之后,您可以将服务注入到需要的控制器中。
创建服务/工厂的优势:
-
易于测试
-
易于维护和扩展
-
更多的是面向对象的
-
所有控制器的单一实例(更好的内存使用率)
-
更优雅。。(如果你的老板是一个优雅的程序员)
想象一下,你在另一个控制器中需要这个serviceHandler,最后你在每个控制器中都有这个硬编码。。如果必须更改/扩展serviceHandler,则必须为每个控制器执行此操作,但如果使用工厂,则需要在服务定义中执行一次。
如果你用工厂创建serviceHandler,你的控制器会看起来像:
theApp.controller('controller', ['$scope','serviceHandler', function($scope, serviceHandler){
serviceHandler.init(); // is practically the same of ng init
$scope.recall = serviceHandler.callService;
}]);
通过这种方式,您可以修改serviceHandler,并在每个使用它的控制器中注入这个serviceHandler。您的服务代码是可以的,但最好在工厂/服务/提供者中创建服务,而不是在每个控制器中创建硬编码的服务,因为这是单个实例,您可以重用代码,并节省内存。
- Google Data API上的OOP Javascript回调方法
- 如何在浏览器中使用基于类的OOP JavaScript
- 对创建OOP Javascript的误解
- 尝试访问方法的 OOP JavaScript
- 每次单击按钮时,如何创建新对象并将旧对象存储在数组中?OOP JavaScript
- 无法删除事件侦听器 TypeScript/OOP JavaScript
- 普通的OOP Javascript:将localStorage视为数组不起作用
- Debug OOP javascript
- 如何从OOP Javascript开始
- OOP JavaScript:“;这个“;必要的方法
- OOP JavaScript - this reference
- Javascript事件addEventListener为同一函数多次注册;使用OOP Javascript
- 为什么在OOP javascript中使用object.prototype.constructor
- OOP Javascript-通过另一个公共方法从公共方法访问特权方法
- 最佳OOP JavaScript安全实践
- OOP Javascript "get property"必要的方法
- 未捕获的ReferenceError: myVar未定义;OOP Javascript
- OOP JavaScript - 初学者示例
- createjs.Shape()不能与OOP JavaScript一起工作
- 如何在JetBrains Webstorm/PHPStorm中编写oop javascript(带继承)来获得自动完成/