我正在关注Angular Services的教程并测试下面提到的代码。我可以从TestService
喜欢 -
TestService.name
& TestService.$get()
但我想知道如果我需要从函数返回一个值,例如 - return "From myFun"+this.name;
。
代码 -
var myApp = angular.module('myApp', []);
myApp.controller('mainCtrl', function($scope, TestService){
$scope.service = "Data From Service: "+TestService;
});
var myFun = function() {
this.name = "FirstName";
this.$get = function() {
this.name = "Second Name";
return "From $get: "+this.name;
};
return "From myFun"+this.name;
};
// A service returns an actual function
myApp.service('TestService', myFun);
答案 0 :(得分:1)
<强>服务强>
服务是一个构造函数,它使用the创建对象 新关键字。您可以向服务对象添加属性和功能 通过使用this关键字。与工厂不同,它不会返回 任何东西(它返回一个包含方法的对象)。
服务确实放置了this
,它是该服务的上下文,然后返回该上下文。
简单地说你不能从服务返回对象,你可以使用工厂来做,因为工厂确实返回object
。
<强>工厂强>
var myApp = angular.module('myApp', []);
myApp.controller('mainCtrl', function($scope, TestService){
$scope.service = "Data From Service: "+TestService;
});
var myFun = function() {
var name = "FirstName";
return "From myFun"+this.name;
};
// A service returns an actual function
myApp.factory('TestService', myFun);
但是在上面的情况下,你一次只能返回一个值,用于添加你需要修改你将要从工厂返回的对象的函数。
修改工厂
var myApp = angular.module('myApp', []);
myApp.controller('mainCtrl', function($scope, TestService) {
$scope.service = "Data From Service: " + TestService;
});
var myFun = function() {
var TestService = {};
TestService.name = "FirstName";
TestService.get = function() {
TestService.name = "Second Name";
return "From myFun" + TestService.name;
};
};
// A service returns an actual function
myApp.factory('TestService', myFun);
有关详细信息,请阅读this answer,其中说明了如何实施服务和工厂。