【问题标题】:Storing data in $rootScope在 $rootScope 中存储数据
【发布时间】:2016-07-29 21:04:09
【问题描述】:

是否建议将数据存储在 $rootScope. 我有一个科尔多瓦应用程序,它使用每 100 毫秒发送一次的传感器数据。为了让我在多个控制器中使用该数据,我使用的是 $rootScope.sensorData 变量,该变量每 100 毫秒刷新一次。可以这样使用吗?有没有更好的方法?

谢谢

【问题讨论】:

标签: angularjs cordova rootscope


【解决方案1】:

您可以将其存储在工厂中。在 AngularJS 中工厂是单例的,所以只创建实例。

myApp.factory('SensorSrv', function SensorSrv() {
  var sensorData;
  return {
    setData: setData,
    getData: getData
  };

  function setData(data) {
    sensorData = data;
  }

  function getData() {
    return sensorData;
  }
});

如果你想持久化数据,你也可以使用本地存储。

【讨论】:

  • 使用工厂在多个控制器之间提供数据是我所知道的最好的方式。但是数据将每 100 毫秒设置一次,这将成为内存占用。实现这种影响性能甚至比在 $rootScope 中存储数据更重要。
【解决方案2】:

我认为在整个代码逻辑中使用 $rootScope 并不是一个好主意,这背后有很多原因......您可以在 services它更灵活......你也可以看到这个链接

Best practice for using $rootscope in an Angularjs application?

【讨论】:

    【解决方案3】:

    来自官方文档:

    $rootScope存在,但可以作恶

    Angular 中的作用域形成一个层次结构,原型继承自树顶部的根作用域。通常这可以忽略,因为大多数视图都有自己的控制器,因此也有自己的作用域。

    有时,您想让某些数据对整个应用程序具有全局性。对于这些,您可以注入 $rootScope 并像任何其他范围一样在其上设置值。由于作用域从根作用域继承,这些值将可用于附加到指令(如 ng-show)的表达式,就像本地 $scope 上的值一样。

    当然,全局状态很糟糕,您应该谨慎使用$rootScope,就像(希望)在任何语言中使用全局变量一样。特别是,不要将其用于代码,仅用于数据。如果您想在 $rootScope 上放置一个函数,最好将它放在一个可以在需要的地方注入并且更容易测试的服务中。

    相反,不要创建一个生活中唯一目的是存储和返回数据位的服务。

    --AngularJS Miscellaneous FAQ

    【讨论】:

      【解决方案4】:

      我推荐使用 app.value app.value('test', 20); 因为通过使用 $rootScope,您将该值暴露给所有可能构成安全威胁的服务。通过使用 value,您可以根据自己的要求确定要在哪里使用该变量。

      【讨论】:

        猜你喜欢
        • 2013-05-20
        • 2015-12-05
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多