【问题标题】:Maintain Angular Service through page change通过页面更改维护 Angular 服务
【发布时间】:2015-07-20 11:11:11
【问题描述】:

我正在使用前端的 Angular 和后端的 Java Servlet 创建一个 Web 门户。该页面以登录页面开始,它接受输入并将其发送到 servlet。服务器验证并使用具有用户名和他的权限的 JSON 对象进行响应。我将值设置为注入控制器的服务。然后我使用$windows.location 将网页更改为主页,即仪表板。现在我想在主页的控制器中使用这个服务。但是由于页面更改,我无法维护$scope

所以我想到了使用 response.redirect() 重定向到后端的主页。但是我不知道如何在重定向后在主页中获取用户详细信息。就像我如何将用户对象传递给Home.java servlet

这是我的 LoginCtrl.js

if (isValid) {
            $http({
                method : 'POST',
                url : 'login',
                data : JSON.stringify($scope.user),
                headers : {
                    'Content-Type' : 'application/json'
                }
            }).success(function(data) {
                if (!("failure" == data)) {
                    console.log(data);
                    var user = {};
                    user.name = data.name;
                    user.permissions = data.permissions;
                    MyService.setUser(user); // set the values for user

                    $window.location.href = 'main.jsp';
                } else {
                    $scope.information = "Invalid username/password!"
                }
            }).error(function(data) {
                console.log(data);
            });

这是我的 Login.java servlet

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        Gson gson = new Gson();
        JsonParser parser = new JsonParser();
        JsonObject obj = (JsonObject) parser.parse(request.getReader());

        String username = "";
        String password = "";

        if (obj.get("name") != null & obj.get("password") != null) {
            username = obj.get("name").getAsString();
            password = obj.get("password").getAsString();
        }

        System.out.println("Username :" + username);
        System.out.println("Password :" + password);

        // Passing username and password to Context and validate.
        // If authentication successful, set user object with details and return
        // it
        // User user = (User) Context.Authorized(username,password)

        // for testing
        User user = new User();
        user.setName(username);
        user.setPermission("crwd");
        user.setAuthorized(true);

        response.setContentType("text/html");
        if (user.getAthorized()) {
            String responseJSON = gson.toJson(user);
            response.getWriter().write(responseJSON);
        } else {
            response.getWriter().write("failure");
        }
    }

请告诉我我的要求是否可以在 Angular 中实现,或者是否可以使用 Java 来实现,那么如何?

【问题讨论】:

  • 您可以使用本地存储来保存数据。用户登录后,将响应保存在浏览器的本地存储中,然后无论重定向如何,此数据都将在您的整个站点中可用。
  • 本地存储是使用 Angular 还是使用 Java?你能给我一个在谷歌搜索的关键字吗?
  • 你可以在$rootScope而不是$scope中维护信息。它将在整个应用程序中可用
  • 但重定向页面后,服务状态是否仍然存在于$rootScope中
  • 它的纯js,看这个:设置:localStorage.setItem("FName", User.FName);并获得价值: var FName= localStorage.getItem("FName");

标签: javascript java angularjs servlets


【解决方案1】:

如果你重定向到另一个页面,就会有完全不同的 Angular 应用程序,你会失去服务状态。

  • 您可以制作单页应用程序,并为登录页面和主页导航栏使用 $routeProvider 和 ng-view。

  • 或者你的应用可以包含不同的页面,但是在每个页面中你必须调用服务器来获取用户信息

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 2010-09-11
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多