这是我的服务:
var MyService= function () {
var filters, charts, subscription;
return {
getFilters: function () {
return this.filters;
},
setFilters: function (value) {
this.filters = value;
},
getCharts: function () {
return this.charts;
},
setCharts: function (value) {
this.charts = value;
},
getSubscription: function () {
return this.subscription;
},
setSubscription: function (value) {
this.subscription = value;
}
};
};
angular.module('Something').factory('MyService', MyService);
您可以用于在控制器之间传递参数的典型服务。
控制器A具有在用户选择链接时被调用的功能;该函数在我的服务中设置我的项目,并使用窗口重定向到另一个页面。
$scope.pressedButton = function (subscription) {
MyService.setSubscription(subscription);
$window.location.href = 'newPage.html';
}
newPage.html的控制器B应该能够从我的服务中读取和调用my.tem,然后它说它未定义。
console.log(MyService.getSubscription()) == undefined.
任何人都知道为什么?我一直在使用setter和getter但是因为我有点限于我的路由($ window而不是ui-router或ng-router),我觉得转移到一个全新的页面是什么正在清理我的服务..
答案 0 :(得分:0)
我相信你可能会交换工厂和服务的语法。
myApp.factory('sample', function(){
var obj = {
item: ''
}
return {
getItem: function () {
return obj.item;
},
setItem: function (value) {
obj.item= value;
}
}
}
vs a service
myApp.service('sample', function(){
var _item = '';
this.getItem = function () {
return _item;
};
this.setItem = function (value) {
_item = value;
}
}
答案 1 :(得分:0)
我个人更喜欢$factory
数据模型语法,因为它为您提供了伪私有变量和所有这些数据的单一访问点。这样可以更轻松地测试代码,并且不太可能获得格式错误的数据。
另外,如果您要尝试这样的路线,我会推荐使用ui-router。
在您执行set / get的单独服务中,包括$state
,然后将该模板文件注入您的视图中。
但语法明智,@ alwang85是正确的。 :1: