我真的很感激一些反馈如何运作?我有一个服务,我存储一些会话特定的变量,如表排序选择等。
代码似乎工作正常。但是,我的问题是 - 如何在不返回实际变量的情况下检索这些值?
我不应该使用某种Getter功能吗?它们是用setter方法公开的,或者我在这里做了一些完全错误的事情?使用这个是某种罪魁祸首?或者仅仅是我对javascript范围的理解不足? :)
服务代码:
angular.module('myApp').service('sessionService', function () {
this.searchView = 2; // <-- edited in, forgot this
return {
setSearchView: setSearchView
};
function setSearchView (searchView) {
this.searchView = searchView;
}
});
然后我们有控制器。
angular.module('myApp').controller('SearchCtrl', function (sessionService) {
console.log(sessionService.searchView); //undefined
sessionService.setSearchView(1);
console.log(sessionService.searchView); // 1
});
一旦我从控制器设置了searchView,就可以像下面那样访问它。
任何可以帮助我理解这一点的事情都将受到赞赏。
编辑:我忘了添加this.searchView实际上是在启动时,控制器中的console.log中的结果相同。
答案 0 :(得分:2)
服务就是所谓的“单身人士”,这意味着您可以设置一个不能直接访问或返回的变量,并且如果是UI,它将维护它的生命值。在这种情况下,如果您希望能够访问sessionService.searchView,您可以通过以下几种方式实现:
1)设置私有var searchView,然后在return语句中添加一个getter函数:
return {
setSearchView: setSearchView,
getSearchView: function() {
return searchView;
}
};
2)创建相同的私有变量,然后将其添加到return语句中:
var searchView;
return {
setSearchView: setSearchView,
searchView: searchView
};
答案 1 :(得分:1)
将服务注入控制器
angular.module('myApp').controller('SearchCtrl', function (sessionService) {
为您提供服务定义功能的实例。换句话说,您的sessionService
基本上是
new function () {
return {
setSearchView: setSearchView
};
function setSearchView (searchView) {
this.searchView = searchView;
}
}
,即您定义以new开头的服务时传入的函数。 new 表示您只是将其用作构造函数。
现在,我们对 new 和Javascript构造函数有什么了解 - 只是如果构造函数返回一个对象,那就是new的左侧设置为什么。成员方法中的this
基本上是指同一个对象。
简而言之,您的服务定义是构造函数。在简单的Javascript中,它看起来像这样。
function SessionService () {
return {
setSearchView: function (searchView) {
this.searchView = searchView;
}
};
}
var sessionService = new SessionService();
请注意,我将SessionService
大写以表明它是构造函数,并且sessionService
处于驼峰状态,因为它是一个实例。
考虑到这一点,当你这样做时
sessionService.setSearchView(1);
您要将searchView
实例的sessionService
属性设置为1.当您执行
sessionService.searchView
这是您正在访问的完全相同的属性,您将获得您设置的值。
您也可以执行sessionService.searchView
= 1,它也可以正常工作,因为您所做的只是处理sessionService实例。