繁体   English   中英

用户首次加载应用程序时,如何在Firebase中创建初始数据结构?

[英]How to create initial data structure in Firebase when user first loads app?

我有一个AngularJS应用程序,我想将各种页面状态持久化到Firebase中。 因此,例如,在控制器功能中初始化用户首次访问应用程序时的初始数据结构,如下所示:

$scope.sections = {
  sectionA = true,
  sectionB = true,
  sectionC = true,
};

然后将其绑定到Firebase位置:

var fb = $firebase(new Firebase('http://myapp.firebaseio.com/settings/sections'));
fb.$bind($scope, 'sections');

首先,这似乎起作用。 当我更改$ scope.sections对象中的值时,Firebase Forge视图也会显示值更改。 但是,当我重新加载页面时,它将Firebase中的值重置为默认值。

重新加载页面后,如何在不覆盖的情况下初始化默认值?

编辑:

我尝试使用loaded事件设置默认值(如果load值为null):

$scope.sections = {}
var fb = $firebase(new Firebase('http://myapp.firebaseio.com/settings/sections'));
fb.$bind($scope, 'sections');
fb.$on('loaded', function(value) {
  if (value == null) {
    $scope.sections = {
      sectionA = true,
      sectionB = true,
      sectionC = true,
    };
  }
});

但是,尽管默认值是短暂可见的,但一些/全部几乎立即被重置。 我怀疑这可能是由于我使用这些特定设置的方式-它们绑定到Angular UI-Bootstrap Accordion指令的isOpen属性,以控制页面的哪些部分是打开/可见的。 控件工作的方式是将部分/所有部分重置为关闭状态,即为false,即使我的默认设置中所有部分都处于打开状态。

EDIT2:

我已经解决了上述问题。 我使用的Angular-UI Bootstrap版本在评估isOpen属性的方式上存在错误。 一旦我从更高版本中应用了此修复程序,它就可以按预期工作。

AngularFire已将$on('loaded')更改$loaded()

var defaults = {...};
var ref = new Firebase("https://myapp.firebaseio.com/settings");
var sync = $firebase(ref);
var syncObject = sync.$asObject();
syncObject.$bindTo($scope, "settings");
syncObject.$loaded(function(data) {
  if ('$value' in data && data.$value == null) {
    sync.$set(defaults);
  }
});

您可以通过“ loaded”事件执行此操作,该事件返回存储在Firebase中的当前值

// the initial value to be written
var defaults = {...};

// 3-way bind to Firebase
var fb = $firebase(new Firebase('http://myapp.firebaseio.com/settings'));
fb.$bind($scope, 'settings');

// wait for data to load
fb.$on('loaded', function(value) {
   // check if it has a value, if not, use defaults
   if( value === null ) { $scope.settings = defaults; }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM