在$rootScope中存储用户数据 - 是好还是坏?

10 浏览
0 Comments

在$rootScope中存储用户数据 - 是好还是坏?

我正在构建一个Angularjs应用程序,需要在几个不同的模块(用户个人资料、点赞帖子、评论)中访问已登录用户的信息。我知道如果某些数据需要在Angularjs应用程序的不同部分之间共享,最好使用servicefactory。那么$rootScope呢,像这样使用呢?

.run(function($rootScope, userService) {
  userService.getLoggedInUser()
    .then(function(user){
      $rootScope.loggedInUser = user; // 包含用户名、加入日期、照片URL等信息。
    })
})

如果我需要在应用程序的任何部分中使用用户信息,我可以从根节点获取它

用户名:{{ $root.loggedInUser.username }} 
...
alert($rootScope.username());

这样做会以任何负面方式暴露应用程序吗?我没有引入任何敏感信息,如密码或电子邮件,但也许我忽略了一些明显的东西。

非常感谢任何意见!

0
0 Comments

在一般情况下,你不希望将数据存储在$rootScope中,就像你不希望将变量存储在全局作用域的Javascript中一样。

将数据存储在服务中的优点是可以封装数据,并通过服务的唯一API进行访问,服务可以操纵数据 - 它知道如何从服务器检索数据,或者如何将更改存储回服务器。

在任何情况下,这也可能取决于你的应用程序的大小和目的。如果它是一个小型的学校项目或个人网站,长期来看可能不会对你产生太大的影响,现在将其存储在$rootScope上可以节省时间。

然而,将用户数据存储在$rootScope中也有一些问题。首先,$rootScope是一个全局对象,它可能会被其他模块或控制器访问和修改。这样可能会导致一些意外的副作用和不一致的行为。其次,$rootScope中的数据没有明确的作用域,这意味着它可以被任何控制器或模块轻松地访问和修改。这降低了代码的可维护性和可读性。

为了解决这个问题,我们可以使用服务来存储用户数据。服务可以提供一个独立的作用域来封装数据,并且可以通过唯一的API进行访问和修改。这样可以确保数据的安全性和一致性。另外,使用服务还可以更好地组织和管理代码,提高代码的可维护性和可读性。

下面是一个使用服务来存储用户数据的示例:

// 创建一个名为UserService的服务
app.service('UserService', function() {
  // 在服务的作用域中定义用户数据
  var userData = {};
  // 提供访问和修改数据的方法
  this.getUserData = function() {
    return userData;
  };
  this.setUserData = function(data) {
    userData = data;
  };
});
// 在控制器中使用UserService来存储和访问用户数据
app.controller('UserController', function($scope, UserService) {
  // 获取用户数据
  var userData = UserService.getUserData();
  // 修改用户数据
  userData.name = 'John';
  userData.age = 25;
  // 将修改后的数据保存回服务中
  UserService.setUserData(userData);
});

使用服务来存储用户数据可以避免$rootScope的一些问题,并提供更好的代码组织和管理。这种做法可以提高代码的可维护性和可读性,并确保数据的安全性和一致性。诸如此类的最佳实践将有助于开发更健壮和可扩展的应用程序。

0
0 Comments

在AngularJS中,我们经常需要在应用程序的不同部分之间共享用户数据。一种常见的做法是将这些数据存储在$rootScope中,以便可以在整个应用程序中访问它们。然而,存储用户数据在$rootScope中可能会带来一些问题。

首先,存储用户数据在$rootScope中会导致数据的全局可见性。这意味着任何地方都可以访问和修改这些数据,从而增加了数据被误用或滥用的风险。此外,$rootScope中的数据也会在整个应用程序的生命周期内保持存在,这可能会导致内存泄漏和性能问题。

另一个问题是,如果用户在刷新页面或关闭浏览器后重新访问应用程序,$rootScope中的数据将被重置。这意味着用户可能会丢失之前的数据,导致不良的用户体验。

为了解决这些问题,我们可以使用sessionStorage来存储用户数据。sessionStorage是浏览器提供的一种机制,可以在浏览器会话期间(即用户打开和关闭浏览器之间)将数据存储在客户端。与$rootScope不同,sessionStorage中的数据只能在同一个浏览器标签页或窗口中共享,无法在不同标签页或窗口之间共享。

使用sessionStorage很简单。我们可以使用sessionStorage对象的setItem方法将数据存储在其中,使用getItem方法从中读取数据,使用removeItem方法删除数据。以下是一个示例:

// 存储数据
sessionStorage.setItem('username', 'John');
// 读取数据
var username = sessionStorage.getItem('username');
// 删除数据
sessionStorage.removeItem('username');

通过使用sessionStorage,我们可以将用户数据存储在浏览器中,以便在应用程序的不同部分之间共享。与$rootScope相比,sessionStorage提供了更好的数据隔离和安全性,并解决了数据在刷新或关闭浏览器后丢失的问题。因此,我们应该考虑使用sessionStorage来存储用户数据,而不是$rootScope。

0