虽然问题更多,我认为javascript类型问题比Angular问题更多,我正在创建一个服务,我会像这样称呼它
// controller injects activityApi , then service function call is made
var activities = activityApi.getActivityById(1122);
如果我没有在功能名称前添加“this”关键字,则会出错
1.为什么我需要“这个”
2.还有什么其他选择? (我试图养成不用function blah() { ... }
this.getActivityById = function(id) {
$http.get('/Umbraco/Api/ActivityApi/GetActivity').
success(function (data, status, headers, config) {
console.log(data);
return data;
}).
error(function (data, status, headers, config) {
// log error
});
};
答案 0 :(得分:1)
如果您正在写工厂,请在工厂内使用一个物品,并将所有电话都放入其中。如
(function() {
'use strict';
angular
.module('app')
.factory('activityApi', activityApi);
activityApi.$inject = ['$http'];
function activityApi($http) {
var service = {
getActivityById : getActivityById ,
};
return service;
function getActivityById (id) {
$http.get('/Umbraco/Api/ActivityApi/GetActivity').
success(function (data, status, headers, config) {
console.log(data);
return data;
}).
error(function (data, status, headers, config) {
// log error
});
};
};
})();
这里你返回的工厂对象中有调用函数。
您可以在此处调用工厂函数
var activities = activityApi.getActivityById(1122);
答案 1 :(得分:0)
关于角色的服务和工厂。 .service
和.factory
都返回函数。但是,有角度的$injector
使用.service
关键字调用new
返回的函数(使用$instantiate
方法),而调用.factory
函数则是使用invoke
方法。由于它使用new
关键字作为服务函数,因此您必须在函数内部使用this
关键字来引用由new
创建并从函数返回的对象。
正如@NikhilVM所示,如果您想避免使用此功能,则可以使用factory
代替service
。服务和factory
返回值都被缓存,因此如果工厂返回一个对象,它将变为全局。因此,从这个意义上来说,service
使用this
来添加方法没有什么不同。使用factory
的优点在于,您可以返回一个函数构造函数,以便稍后调用以实例化多个类实例,而不能使用.service
执行该操作。
答案 2 :(得分:0)
如果您希望未来保持一致,您将需要使用工厂服务。
那么对方是否有任何优势呢?就在这里。事实证明,在迁移到ES6时,尽可能使用服务更好。原因很简单,一个服务是一个构造函数而一个工厂不是。在ES5中使用构造函数允许我们在迁移到ES6时轻松使用ES6类。
参考 - 一些Angular 2创作团队的Angular guru Master(网站上说) 这是一个很好的阅读 http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html
this
一起使用
或