Angularjs 当用户首次加载应用程序时,如何在Firebase中创建初始数据结构?
我有一个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
$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