Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:刷新ng视图外部的角度范围_Javascript_Angularjs_Angularjs Service - Fatal编程技术网

Javascript AngularJS:刷新ng视图外部的角度范围

Javascript AngularJS:刷新ng视图外部的角度范围,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,好的,我有一个基本的登录页面,当用户登录时,我想在屏幕顶部的导航栏上显示更多详细信息。当他们单击“注销”时,这将消失。这是工作(在某种程度上)但是要让导航栏改变我需要刷新页面,这显然不会发生当我只是使用路由来改变我的ng视图 当用户单击“登录”时,他们的用户名将存储在使用ng视图中的登录控制器调用的服务中 authService.SetUsername(user.Username); 但是,我希望这在ng视图之外的navbar控制器中产生效果 authService.SetUsername(u

好的,我有一个基本的登录页面,当用户登录时,我想在屏幕顶部的导航栏上显示更多详细信息。当他们单击“注销”时,这将消失。这是工作(在某种程度上)但是要让导航栏改变我需要刷新页面,这显然不会发生当我只是使用路由来改变我的ng视图

当用户单击“登录”时,他们的用户名将存储在使用ng视图中的登录控制器调用的服务中

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.displayName
  • 在导航栏的HTML标记中使用{{displayName}}
  • 登录页面成功后,更新$rootScope.displayName
  • 赞美安格拉斯
  • 通常,我建议使用对象$rootScope.user,在其中可以存储有关用户的更多信息,而不仅仅是displayName

  • 创建变量$rootScope.displayName
  • 在导航栏的HTML标记中使用{{displayName}}
  • 登录页面成功后,更新$rootScope.displayName
  • 赞美安格拉斯

  • 通常,我建议使用对象$rootScope.user,在其中可以存储有关用户的更多信息,而不仅仅是displayName。

    是否可以在此处添加authService服务代码以帮助您获得更多信息?是否只刷新范围?你不能刷新所有页面吗?你能在这里添加authService服务代码来帮助你更多吗?你想只刷新范围吗?您不能刷新所有页面吗?因为他正在从$rootScope进行广播,所以可以在控制器中的$scope上收听广播。没什么大不了的,只是控制器中少了1个依赖项。不确定这两种方法是否更有效,否则会像符咒一样发挥作用。以前不知道广播服务。因为他是从$rootScope广播的,所以可以在控制器中的$scope上收听。没什么大不了的,只是控制器中少了1个依赖项。不确定这两种方法是否更有效,否则会像符咒一样发挥作用。以前对广播服务一无所知。