至於寫入db, VueFire 其實還會在背後幫你的 vue instance 新增一個 $firebaseRefs 的屬性, $firebaseRefs的屬性綁定到你要綁定的DB節點, 所以新增可以這樣改寫
set() {
let {name, age} = this;
this.$firebaseRefs.users.push({
name,
age
})
}
name 輸入 master, age 輸入 66
如果要新增在一開始 config 中沒有綁定的屬性怎麼辦?
可以另外做綁定, 效果是一樣的
mounted() {
this.$bindAsArray('test', DB.ref('users/test'))
}
到 dev tools 查看
當然也可以綁定物件, 第三個參數是 cancelCallback, 第四個是readyCallback, 若不需要可傳入 null
vm.$bindAsObject('user', myFirebaseRef.child('user'), null, () => console.log('Ready fired!'))
vm.$unbind('user') //解除綁定
更新DB可以這麼做
updateItem() {
let [andy] = this.users.filter(user => user.name === 'andy')
let key = andy['.key']
andy.age = 78
delete andy['.key'] // 記得把VueFire幫你插入的key拿掉再存入
this.$firebaseRefs.users.child(key).set(andy)
}
andy的年齡變更成78了, 但怎麼資料也新增了另外一andy ?
這是因為andy指向的是這個 instance 的 andy,改善一下:
updateItem() {
let [andy] = this.users.filter(user => user.name === 'andy')
andy = {...andy}
let key = andy['.key']
andy.age = 20
delete andy['.key']
this.$firebaseRefs.users.child(key).set(andy)
}
也可以這樣
updateItem() {
let andy = {...this.users.filter(user => user.name === 'andy')
.reduce(andy => andy)}
let key = andy['.key']
andy.age = 22
delete andy['.key']
this.$firebaseRefs.users.child(key).set(andy)
}
或是
updateItem() {
let andy = Object.assign({},
this.users.filter(user => user.name === 'andy')[0]);
let key = andy['.key']
andy.age = 23
delete andy['.key']
this.$firebaseRefs.users.child(key).set(andy)
},
如果name不重複才可以這樣用filter!
andy拷貝過後就正常了
終於來到最後最簡單的刪除資料
deleteItem() {
this.$firebaseRefs.users.child(this.users[0]).remove()
}
andy已經消失了