2016-09-22 2 views
1

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" 
    }, 
.... 

내가 혼란 스러워요은 왜 그렇게 행동? $을 (를) 사용하여 참여를 구현하는 방법은 잘못 되었나요? 또는 이런 종류의 조인을 구현하는 다른 방법을 사용해야합니까? 나는 당신의 귀중한 제안과 아이디어를 기대하고 있습니다.

답변

관련 문제