firebase 및 angularjs를 처음 사용했습니다. 내 판매 신청서에는 두 가지를 모두 사용하고 싶습니다. 그래서, 내 응용 프로그램에서 사용하고 있습니다 AngularJS v1.5.8 + Firebase v3.3.0 + AngularFire 2.0.2. firebase db에 sales 및 users 객체가 있고 한 사용자가 여러 제품을 판매 할 수있는 비즈니스 로직이 있지만 한 제품에는 단 하나의 소유자 (사용자) 만있을 수 있습니다. 여기
는 사용자 및 판매 데이터베이스에 오브젝트입니다 :
{
"sales" : {
"-KQlb5N6A9rclc5qcWGD" : {
"price" : 8,
"quantity" : {
"count" : 12,
"type" : "porsiyon"
},
"status" : "sale",
"title" : "Patlicanli Borek",
"user" : "-KQ52OJd-lwoDIWzfYFT"
},
"-KQlcScsq8cidk7Drs04" : {
"price" : 12,
"quantity" : {
"count" : 10,
"type" : "porsiyon"
},
"status" : "sale",
"title" : "Deneme",
"user" : "-KQ5-mZBt6MhYy401gGM"
},
"-KQzXHwOv2rC73scjV46" : {
"price" : 12,
"quantity" : {
"count" : 11,
"type" : "porsiyon"
},
"status" : "sale",
"title" : "Pacanga",
"user" : "-KQ5-mZBt6MhYy401gGM"
},
"-KSCBgpArtnKunUuEuVr" : {
"price" : 15,
"quantity" : {
"count" : 15,
"type" : "porsiyon"
},
"status" : "sale",
"title" : "Iskembe",
"user" : "-KQ52OJd-lwoDIWzfYFT"
}
},
"users" : {
"-KQ5-mZBt6MhYy401gGM" : {
"address" : "Halkali kucukcekmece",
"email" : "[email protected]",
"name" : "Burak Hero",
"nick" : "Burak'in Mutfagi"
},
"-KQ52OJd-lwoDIWzfYFT" : {
"address" : "Izmir kaynaklar",
"email" : "[email protected]",
"name" : "Ayse Kahraman",
"nick" : "Ayse'nin Mutfagi"
}
}
}
내가하고 싶은 것은 내 응용 프로그램을 열 때, 그것은 을 보여줄 것이다 해당 사용자의 세부 사항과 함께 모든 판매. (letgo 응용 프로그램의 기본 페이지처럼) 즉, 판매 및 사용자 객체 간의 간단한 조인을 구현해야한다는 의미입니다. 지금까지 인터넷과 API 문서 전체에서 검색 한 것처럼 firebase에 대한 단일 호출에서 이러한 종류의 조인을 구현할 수있는 방법은 없습니다. (Pl 올바른 날 내가 틀렸다 경우) 그래서 $ 내부의 함수를 사용하여 아래의 메서드를 사용하여 결합을 구현하는.
angular.
module('core.sales')
.service('SalesService', function ($firebaseArray, $firebaseObject, UsersService) {
this.getAllSalesJoin = function() {
var sales;
var refSales = firebase.database().ref('sales');
sales = $firebaseObject(refSales);
sales.$loaded()
.then(function() {
angular.forEach(sales, function (sale) {
var saleUser = UsersService.getUserDetail(sale.user);
saleUser.$loaded()
.then(function() {
sale.user = saleUser;
});
});
});
return sales;
};
});
당신이 끝난 후 나는 지금까지 이렇게 좋은
angular.
module('core.users')
.service('UsersService', function ($firebaseArray,$firebaseObject) {
this.getUserDetail = function (userId) {
var user;
var refUser = firebase.database().ref('users/'+userId);
user = $firebaseObject(refUser);
return user;
};
});
아래와 같이 다른 UsersService를 호출하여 설정 관련 사용자 세부 얻고 각 판매 루핑, 모든 판매를 가져 오는하고있다시피 , SalesService.getAllSalesJoin 함수를 내 컨트롤러 내에서 호출하고 <pre>{{$ctrl.allSales | json}}</pre>
을 사용하여 JSON 객체를 인쇄하면 원하는대로 모든 것이 작동합니다. 아래에서 컨트롤러 코드와 템플릿의 JSON 객체가 인쇄됩니다.
angular.
module('saleList').
component('saleList', {
templateUrl: 'MCTs/sale-list/sale-list-template.html',
controller: ['SalesService','UsersService', function SaleListController(SalesService,UsersService,$scope) {
this.allSales = SalesService.getAllSalesJoin();
}]
});
템플릿이 병합 된 개체에 서버 데이터 (새 판매를 입력하거나 이전을 삭제) 변경
{
"$id": "sales",
"$priority": null,
"-KQlb5N6A9rclc5qcWGD": {
"price": 8,
"quantity": {
"count": 12,
"type": "porsiyon"
},
"status": "sale",
"title": "Patlicanli Borek",
"user": {
"$id": "-KQ52OJd-lwoDIWzfYFT",
"$priority": null,
"address": "Izmir kaynaklar",
"email": "[email protected]",
"name": "Ayse Kahraman",
"nick": "Ayse'nin Mutfagi"
}
},
"-KQlcScsq8cidk7Drs04": {
"price": 12,
"quantity": {
"count": 10,
"type": "porsiyon"
},
"status": "sale",
"title": "Deneme",
"user": {
"$id": "-KQ5-mZBt6MhYy401gGM",
"$priority": null,
"address": "Halkali kucukcekmece",
"email": "[email protected]",
"name": "Burak Hero",
"nick": "Burak'in Mutfagi"
}
},
.....
그러나 인
문제를 보여주고, 각도가 자동으로 변경 사항을 이해하지만, 연결된 함수를 구현하거나 호출하지 않고 뷰에 변경 사항을 적용하면 은 판매 객체과 병합 된 객체 만 인쇄합니다. 아래는 서버 데이터가 변경된 후의 표시 객체입니다. {
"$id": "sales",
"$priority": null,
"-KQlb5N6A9rclc5qcWGD": {
"price": 8,
"quantity": {
"count": 12,
"type": "porsiyon"
},
"status": "sale",
"title": "Patlicanli Borek",
"user": "-KQ52OJd-lwoDIWzfYFT"
},
"-KQlcScsq8cidk7Drs04": {
"price": 12,
"quantity": {
"count": 10,
"type": "porsiyon"
},
"status": "sale",
"title": "Deneme",
"user": "-KQ5-mZBt6MhYy401gGM"
},
....
내가 혼란 스러워요은 왜 그렇게 행동? $을 (를) 사용하여 참여를 구현하는 방법은 잘못 되었나요? 또는 이런 종류의 조인을 구현하는 다른 방법을 사용해야합니까? 나는 당신의 귀중한 제안과 아이디어를 기대하고 있습니다.