我有一个程序列表,每个程序代表数据库中的一个项目(Firebase)。每个项目都由key
识别(如底部图片所示)。这个键是我在创建新程序时尝试绑定到program
对象的。
但是,我的生命无法将key
绑定到传递给program
函数的addProgram
对象。
完成的程序对象看起来像这样:
program = {
label: 'test',
key: '-jWEOkekoktg534944'
}
我现在得到的第一项是这个,让我们假设它的关键是-jWEOkekoktg534944
:
program = {
label: 'test'
}
对于第二项:
program = {
label: 'test',
key: '-jWEOkekoktg534944' // This is the key that the first item should get, but doesn't
}
所以第三项将获得第二项的关键,依此类推。
输入标记和程序创建按钮:
<div ng-show="actions.add">
<input type="text" ng-model="program.label" ng-enter="addProgram(program)">
<span>
<button ng-click="addProgram(program)">Add</button>
</span>
</div>
在这里我们得到了控制器,我有一个监视功能以及addProgram
函数,它接收program
对象。
watch
承诺将始终在addProgram
承诺(我使用数字控制台日志检查)之前解决,这就像我可以想到为什么这不起作用的最后一个可能原因。然而,我可能会非常错误。
// Watch for changes in the database
// and update our frontend accordingly
programs.$watch(function(event) {
// Fetch the programs every time it's updated
programs = fbRefs.getSyncedArray(path);
// When the data has finished loading
// update the programs list or throw an error
programs.$loaded()
.then(function(res) {
console.log(1);
$scope.programs = res;
})
.catch(function(err) {
$scope.addError = 'Unable to create a new program';
});
});
// Add a new program to firebase
$scope.addProgram = function(program) {
fbCrud.push(path, program)
.then(function(ref) {
// Get the key for the item
// that was just inserted
var key = ref.key();
// And assign it to the program
// object for later use
console.log(2);
program.key = key;
});
};
结果:
在这里,您可以看到这些项目收到了上一个项目的参考密钥。 使第一个项目没有密钥,因此我将来无法将其删除。
为什么这不起作用呢?