我需要一个在应用程序生命周期内保持实例化的服务,并提供基本属性,类似于C#语法。例如,如果我创建了一个profile
服务,我希望使用以下语法从我的控制器中获取并设置User
;
activate();
function activate() {
vm.user = profile.user;
}
function login (user, pass) {
api.login(user, pass)
.then(function(response){
profile.user = response.data;
vm.user = profile.
});
}
以下示例是否正确?..
(function () {
'use strict';
angular
.module('blocks.auth')
.service('profile', profileService);
profileService.$inject = [];
function profileService () {
this._user;
this.user = {
get function () {
return this._user;
},
set function (value) {
this._user = value;
}
};
}
})();
很抱歉新手问题,但服务上的语法看起来非常古怪和令人困惑。
答案 0 :(得分:3)
还来自C#/ .NET,我想我知道你头脑中有什么问题。你的大脑可能还在考虑你曾经看过的范围和变量定义。
以下是我如何构建您的服务:
(function () {
'use strict';
angular
.module('blocks.auth')
.factory('profile', profileService);
function profileService () {
var _user = {};
var service = {
// User (read / write)
get user () {
_user = _user || {};
return _user;
},
set user (value) {
if (value && !value.id) { return; }
_user = value || {};
},
// isUserLoaded (read only ... no setter)
get isUserLoaded () {
return (_user && _user.id != null);
},
// Clear (similar to class method)
clear : function () {
_user = {};
}
};
return service;
}
})();
将service
对象视为C#中的class
。这仍然使用您的下划线作为局部变量,因此您可以更好地看到它。哎呀,如果你想更接近地模仿C#类,你也可以将_user
变量移动到service
对象中。然后,get
个和set
个几乎完全相同。
唯一奇怪的是我添加的clear()
函数...主要是因为语法。
答案 1 :(得分:1)
是的,角度服务是单身。只需确保将服务注入控制器即可。
下面的内容(未经测试):
str