Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 当用户首次加载应用程序时,如何在Firebase中创建初始数据结构?_Angularjs_Firebase_Angularfire - Fatal编程技术网

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

Angularjs 当用户首次加载应用程序时,如何在Firebase中创建初始数据结构?,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我有一个AngularJS应用程序,我想将各种页面状态持久化到Firebase中。因此,例如,当用户第一次访问应用程序时,初始数据结构在控制器函数中初始化,如下所示: $scope.sections = { sectionA = true, sectionB = true, sectionC = true, }; 然后我将其绑定到Firebase位置: var fb = $firebase(new Firebase('http://myapp.firebaseio.com/sett

我有一个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中的值重置回默认值

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

编辑:

如果加载的值为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引导版本在计算isOpen属性时有一个bug。一旦我应用了更高版本的修复程序,它就按预期工作。

您可以使用“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; }
});
您可以通过“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; }
});
已将('loaded')上的
$loaded()更改为
$loaded()

已将('loaded')
上的
$loaded()更改为
$loaded()


我已经尝试过了,但是默认值中的一些值正在被重置。我将更新我的问题的细节。我将接受这一点作为我的初始问题的正确答案,即在不覆盖现有值的情况下初始化默认值的正确方法,但我希望得到一些关于我使用此方法遇到的特定问题的反馈。我已经尝试过,但默认值中的一些值正在重置。我将用细节更新我的问题。我将接受这一点作为我的初始问题的正确答案,即在不覆盖现有值的情况下初始化默认值的正确方法,但是,对于我使用这种方法遇到的具体问题,我希望得到一些反馈。我已经提交了一个pull请求,将默认值支持添加到$bind,以减少所需的锅炉板:我已经提交了一个pull请求,将默认值支持添加到$bind,以减少所需的锅炉板:一个快速注释-而不是
sync.$set(默认值)
只需说
$scope.settings=defaults
一个快速注释-而不是
sync.$set(默认值)只需说
$scope.settings=defaults