Я пытаюсь создать модальный вход в систему, который будет обновлять шаблоны (только базовую информацию о пользователе - аватары, имена и т. д.) на разных контроллерах. Примерно следуя этому example, мой подход заключался в том, чтобы связать служебные переменные непосредственно внутри моих партиалов следующим образом:
частичный:
<div ng-controller="TopBarControl">
<span>{{ userService.getInfo() }}</span>
</div>
услуга:
.service('userService', function($http) {
this.userInfo = {
isLogged: false
}
this.getInfo = function() {
return this.userInfo;
}
this.loginInit = function(userName, password) {
$http.get('http://example.com/?json=get_nonce&controller=auth&method=generate_auth_cookie').success(
function(data, status, headers, config) {
var nonce = data.nonce;
$http.get('http://example.com/?json=auth/generate_auth_cookie&nonce='+nonce+'&username='+userName+'&password='+password).success(function(data, status, headers, config) {
if (data.status == 'ok') {
this.userInfo = [
{isLogged: true},
{username: data.user.username},
{firstName: data.user.firstname},
{lastName: data.user.lastname},
{avatar: data.user.avatar}
];
return userInfo;
}
/* handle errors and stuff*/
});
}
})
контроллеры:
.controller('TopBarControl', function($scope, $modal, userService) {
$scope.userService = userService;
$scope.openLogin = function() {
var modalInstance = $modal.open({
templateUrl: 'views/modal.html',
controller: ModalInstanceCtrl,
size: 'lg'
});
}
});
var ModalInstanceCtrl = function ($scope, $modalInstance, userService) {
$scope.login = function () {
userService.loginInit(this.userName, this.password);
};
$scope.ok = function () {
$modalInstance.close($scope.returnResolveVariable);
};
};
Итак, вход работает. Данные отправляются на сервер, и правильные данные успешно возвращаются в приложение. Двусторонняя привязка вроде как работает — каждый раз, когда происходит изменение, шаблон обращается к .getInfo()
и выдает значение userInfo
. Проблема в том, что значение userInfo никогда не меняется. Я не могу понять, что-то странное в том, как я устанавливаю переменную в loginInit
, или есть что-то, чего я принципиально не понимаю в том, как сервисы обрабатывают такие переменные.
userInfo
контроллера иuserInfo
службы. Это не одна и та же переменная. - person gustavodidomenico   schedule 26.06.2014