我有service
和controller
。如何在服务中定义一个可以由控制器调用的方法(传递一个值)?
以下不起作用:
angular.module('test').service('myService', function() {
this.updateContent = function(selection) {
alert(selection);
};
return {
//required for some databinding
model: [
someProperty = null;
]
};
});
angular.module('test').controller('testController', ['$scope', 'myService', function($scope, myService) {
$scope.updateSelection = function() {
myService.updateContent("test");
}
}]);
答案 0 :(得分:5)
您可以在return语句中包含该函数:
return {
//required for some databinding
updateContent: this.updateContent,
model: [
someProperty = null
]
};
答案 1 :(得分:0)
angular.module('test').service('myService', function() {
var service = {};
service.model = { prop : null }
service.updateContent = function() {};
return service;
});
答案 2 :(得分:0)
请将testService
更改为myService
angular.module('test').controller('testController', ['$scope', 'myService', function($scope, myService) {
$scope.updateSelection = function() {
myService.updateContent("test");
}
}]);
答案 3 :(得分:0)
在angularJS中,服务与工厂之间存在一些差异。
当您使用服务时,您将获得传递给服务的功能实例,例如new something()
。
如果您使用工厂,您将获得传递给工厂的函数返回的值。
但是,所有角度服务都是单身人士。服务配方几乎与工厂配方相同,但是注入器使用new
运算符而不是工厂函数调用构造函数。
<强>控制器强>
(function(){
function Controller($scope, Service) {
//update by passing 'toto'
Service.update('toto');
//Retrieve object model
console.log(Service.model);
}
angular
.module('app', [])
.controller('ctrl', Controller);
})();
<强>服务强>
(function(){
function Service() {
var self = this;
self.update = function(value){
console.log(value);
}
self.model = {
test: null
};
}
angular
.module('app')
.service('Service', Service);
})();
<强>控制器强>
(function(){
function Controller($scope, Factory) {
//update by passing 'toto'
Factory.update('toto');
//Retrieve object model
console.log(Factory.model);
}
angular
.module('app', [])
.controller('ctrl', Controller);
})();
<强>工厂强>
(function(){
function Factory(){
function update(value){
console.log(value);
}
return {
update: update,
model: {
test: null
}
}
}
angular
.module('app')
.factory('Factory', Factory);
})();