Javascript AngularJS:刷新ng视图外部的角度范围
好的,我有一个基本的登录页面,当用户登录时,我想在屏幕顶部的导航栏上显示更多详细信息。当他们单击“注销”时,这将消失。这是工作(在某种程度上)但是要让导航栏改变我需要刷新页面,这显然不会发生当我只是使用路由来改变我的ng视图 当用户单击“登录”时,他们的用户名将存储在使用ng视图中的登录控制器调用的服务中Javascript AngularJS:刷新ng视图外部的角度范围,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,好的,我有一个基本的登录页面,当用户登录时,我想在屏幕顶部的导航栏上显示更多详细信息。当他们单击“注销”时,这将消失。这是工作(在某种程度上)但是要让导航栏改变我需要刷新页面,这显然不会发生当我只是使用路由来改变我的ng视图 当用户单击“登录”时,他们的用户名将存储在使用ng视图中的登录控制器调用的服务中 authService.SetUsername(user.Username); 但是,我希望这在ng视图之外的navbar控制器中产生效果 authService.SetUsername(u
authService.SetUsername(user.Username);
但是,我希望这在ng视图之外的navbar控制器中产生效果
authService.SetUsername(user.Username);
在这里,您可以看到我的修剪下来的导航栏控制器如何使用它
app.controller('navbarController', function ($scope, authService, $cookies, $location) {
$scope.displayUsername = authService.GetUsername();
});
但是
displayusername
仅在页面刷新且控制器“重新加载”时更改。如何在存储用户名的服务更新时立即更改此设置?您可以广播登录事件:
.factory("authService", [
"$rootScope",
function ($rootScope) {
return {
login: function () {
// do the login
$rootScope.$broadcast("login-done");
}
}
}
]);
和您的控制器:
app.controller('navbarController', function ($scope, $rootScope, authService, $cookies, $location) {
$scope.displayUsername = authService.GetUsername();
$rootScope.$on("login-done", function() {
$scope.displayUsername = authService.GetUsername();
});
});
您可以广播登录事件:
.factory("authService", [
"$rootScope",
function ($rootScope) {
return {
login: function () {
// do the login
$rootScope.$broadcast("login-done");
}
}
}
]);
和您的控制器:
app.controller('navbarController', function ($scope, $rootScope, authService, $cookies, $location) {
$scope.displayUsername = authService.GetUsername();
$rootScope.$on("login-done", function() {
$scope.displayUsername = authService.GetUsername();
});
});
通常,我建议使用对象$rootScope.user,在其中可以存储有关用户的更多信息,而不仅仅是displayName。是否可以在此处添加authService服务代码以帮助您获得更多信息?是否只刷新范围?你不能刷新所有页面吗?你能在这里添加authService服务代码来帮助你更多吗?你想只刷新范围吗?您不能刷新所有页面吗?因为他正在从$rootScope进行广播,所以可以在控制器中的$scope上收听广播。没什么大不了的,只是控制器中少了1个依赖项。不确定这两种方法是否更有效,否则会像符咒一样发挥作用。以前不知道广播服务。因为他是从$rootScope广播的,所以可以在控制器中的$scope上收听。没什么大不了的,只是控制器中少了1个依赖项。不确定这两种方法是否更有效,否则会像符咒一样发挥作用。以前对广播服务一无所知。