在$ rootScope中存储数据

时间:2016-07-29 06:26:18

标签: angularjs cordova rootscope

建议将数据存储在$ rootScope中。 我有一个使用传感器数据的cordova应用程序,每100ms就会出现一次。对于我在多个控制器中使用该数据,我使用$ rootScope.sensorData变量,该变量每100ms刷新一次。以这种方式使用它可以吗?有没有更好的方法呢?

谢谢

4 个答案:

答案 0 :(得分:2)

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

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

  function setData(data) {
    sensorData = data;
  }

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

如果要保留数据,也可以使用本地存储。

答案 1 :(得分:1)

我认为在整个代码逻辑中使用 $ rootScope 并不是一个好主意,背后有很多原因...而不是你可以在服务<中创建代码登录/ strong>它更灵活......而且你也可以看到这个链接

Best practice for using $rootscope in an Angularjs application?

答案 2 :(得分:1)

来自官方文件:

  

$rootScope存在,但它可以用于邪恶

     

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

     

有时,您希望为整个应用程序提供全局数据。对于这些,您可以注入$rootScope并在其上设置值,就像任何其他范围一样。由于范围继承自根范围,因此这些值可用于附加到ng-show等指令的表达式,就像本地$scope上的值一样。

     

当然,全球状态很糟糕,你应该谨慎地使用$rootScope就像你希望用任何语言的全局变量一样。特别是,不要将它用于代码,仅用于数据。如果您想在$rootScope上添加一项功能,那么将其放入可以在需要的地方注入并且更容易测试的服务几乎总是更好。< / p>      

相反,不要创建一项服务,其唯一目的就是存储和返回数据位。

- AngularJS Miscellaneous FAQ

答案 3 :(得分:0)

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