Javascript 在AngularJS中定义服务和工厂的正确方法
我读了一些AngularJS的教程,注意到每个人都在使用一种稍微不同的方法来定义服务。我想知道什么是最好的方法,或者在使用特定方法时会出现什么缺点 我注意到的第一个区别是使用匿名函数或命名函数:Javascript 在AngularJS中定义服务和工厂的正确方法,javascript,angularjs,Javascript,Angularjs,我读了一些AngularJS的教程,注意到每个人都在使用一种稍微不同的方法来定义服务。我想知道什么是最好的方法,或者在使用特定方法时会出现什么缺点 我注意到的第一个区别是使用匿名函数或命名函数: angular.module('myApp').service('myService', function myService() { var _var1 = "foo"; var public_methods = { doSomething: function() { re
angular.module('myApp').service('myService', function myService() {
var _var1 = "foo";
var public_methods = {
doSomething: function() {
return "bar";
},
var1: _var1
};
return public_methods;
});
angular.module('myApp').service('myService', function() {
var _var1 = "foo";
var public_methods = {
doSomething: function() {
return "bar";
},
var1: _var1
};
return public_methods;
});
myService
命名功能?怎么做第二个不同之处在于定义“公共方法”,例如外部可见的:
angular.module('myApp').service('myService', function myService() {
var _var1 = "foo";
var public_methods = {
doSomething: function() {
return "bar";
},
var1: _var1
};
return public_methods;
});
angular.module('myApp').service('myService', function myService() {
var _var1 = "foo";
this.doSomething = function() {
return "bar";
};
this.var1 = _var1
});
第一个函数返回一个对象,该对象的行为类似于一个接口,并定义了对公众可见的内容。第二个,使用this
定义其方法和属性
第三个区别在于定义如下服务:
var Session = function() {};
Session.prototype.doSomething = function() {
return "bar";
};
Session.prototype.var1 = "foo";
angular.module('myApp').service('myService', Session);
在这里,我只看到一个缺点,即privat变量不能与其他函数共享。但这种方法有什么好处吗?我可以想象,对于工厂(而不是服务),性能会更好,因为原型函数只需定义一次,而不是每次创建新对象(因为服务是单例的,工厂不是)
定义和使用工厂:我也不确定以下方法是否是使用工厂的最佳实践:
angular.module('myApp').factory('User', function() {
var User = function(data) {
angular.extend(this, {
id: null,
email: null,
name: null
}, data);
};
return User;
});
在使用工厂时,我正在编写
新用户(数据)
<代码>数据与一些默认变量等合并。您如何看待此方法?有很大的缺点吗?还是我使用工厂的方式不对?我认为,大体上,你所问的大部分问题——以及你看到它做得不同的原因——都是风格上的差异,都是完全合法的JavaScript。这里没有真正的最佳实践
第一个问题——没什么区别
第二个问题——这两个问题都有效,我个人对第一个问题有强烈的偏好,因为它更灵活;你可以用这种方法做一些漂亮的小把戏,对象操纵之类的东西。你也许可以在“这个”上做所有的手术,但我觉得没必要。再次强调个人偏好
第三个问题——这只是JavaScript支持的一个特性。这只是一个语言特性,最终取决于你喜欢如何设计东西。我将它们内联,但将每个服务保存在自己的文件中。我认为你看到人们这样做是因为它显示了他们这样做,因为在文档中更容易阅读。但其实没什么不同
我对您如何使用该工厂没有问题,但请确保您实际上不需要$resource 谢谢大家!!你能用
$resource
稍微解释一下这个部分吗?所以,这只是一个基于使用工厂来创建“用户”对象的直观预感。。。这可能根本不适用于你正在做的事情。但是$resource服务允许您创建各种预构建的AJAX/REST/JSON有趣的数据模型,并且可以为您节省大量时间。