我正在建造一个具有多种功能的工厂。结构如下:
app.factory('Service', function() {
var Service = {};
Service.method1 = function($scope) {
//logic
return something1
};
Service.method2 = function($scope) {
return something2
};
Service.method3 = function($scope) {
return something3
};
Service.method4 = function($scope, Service) {
var object1 = Service.method1($scope)
var object2 = Service.method2($scope)
var object3 = Service.method3($scope)
//do something with object 1,2,3 and return the result
return result
};
这是在工厂内其他功能内的工厂中使用功能的正确方法吗?而且我不确定我是否可以像这样通过$ scope。
答案 0 :(得分:0)
回答问题1
您可以从self
var moduleA= angular.module('A',[]);
moduleA.factory('Service', function() {
var self = this;
self.method1: function() {
alert('a');
},
self.method2: function() {
self.method1();
}
};
});
然后你可以像这样打电话给你的工厂服务
angular.module('B',['A']).controller('BCtrl',function($scope,'Service'){
Service.method2();
});
回答问题2
服务不应更改任何$scope
。您通常不会在工厂,服务或提供商内使用$scope
。但是,您可以在工厂的函数构造函数中注入$rootScope
依赖项并使用它。
module.factory( 'Service', function($rootScope){
$rootScope.value = "value";
});
答案 1 :(得分:0)
工厂需要返回服务对象。持久数据在工厂函数中声明为var
。
app.factory('Service', function() {
//Declare persistant data here
var persistantData;
var Service = {};
Service.method1 = function(arg) {
//logic
return something1;
};
Service.method2 = function(arg) {
return something2;
};
//return service object
return Service;
};
用法:
app.controller('ctrl1', function($scope, Service) {
$scope.out1 = Service.method1($scope.in1);
});
存储在持久数据中的任何内容都将持续应用程序的整个生命周期。