не получает значение от getRecipe () - PullRequest
0 голосов
/ 06 августа 2020
• 1000 *
 @Injectable()
export class RecipeService{
  recipesChanged = new Subject<Recipe[]>();
  private recipes:Recipe[]=[];
constructor(private slService:ShoppingListService){}
   setRecipes(recipe: Recipe[]){
      this.recipesChanged.next(this.recipes.slice());
     console.log("value from setRecipe()", this.recipes);
      }

   getRecipes(){
     console.log("value from getRecipes()", this.recipes.slice());
      return this.recipes.slice();
    
    }





  

в RecipeListComponent

   export class RecipeListComponent implements OnInit, OnDestroy {

   recipes:Recipe[];
   subscription: Subscription;
   constructor(private recipeService : RecipeService  , 
  private router : Router ,private route : ActivatedRoute 
   ) {}
    ngOnInit() {
    this.recipeService.recipesChanged
  .subscribe(
    (recipes: Recipe[]) => {
     console.log("recipes from recipe list comp",recipes);
      this.recipes = recipes;
     
    }
  );
 console.log("my recipes",this.recipes);
 this.recipes= this.recipeService.getRecipes();   

  }

, а данные извлекаются из firebase в службе хранилища данных и устанавливаются в setRecipe () службы рецептов. Я получаю значение рецептов из Firebase в службу хранилища данных, а в журнале setRecipe () я получаю значение, но оно не устанавливает значение моих рецептов [] и поэтому не передает значение компоненту.

1 Ответ

0 голосов
/ 06 августа 2020

В вашем setRecipes значение, испускаемое вашим субъектом, является пустой переменной recipes массива, и ваш массив recipes никогда не изменяется.

Таким образом, getRecipes всегда будет возвращать пустой массив.

Это также немного странно, если вы выдаете список рецептов с темой, зачем вам метод getRecipes? Вы должны просто выдать список рецептов, переданный в функцию setRecipes

  setRecipes(recipe: Recipe[]){
      this.recipesChanged.next(recipe.slice());
  }

и в вашем компоненте

ngOnInit() {
    this.recipeService.recipesChanged
    .subscribe(
        (recipes: Recipe[]) => {
            this.recipes = recipes;     
        }
    );
}

Если вы используете sh, чтобы сохранить список рецептов в своей службе, тогда вы может сделать что-то вроде

@Injectable()
export class RecipeService{
recipesChanged = new BehaviourSubject(false);
private recipes:Recipe[]=[];

constructor(private slService:ShoppingListService){}

setRecipes(recipe: Recipe[]){
    this.recipes = recipe;
    this.recipesChanged.next(true);
}

getRecipes(){
    return this.recipes.slice();        
}

и в вашем компоненте

ngOnInit() {
    this.recipeService.recipesChanged
    .subscribe(
        hasChanged => {
            if (hasChanged)
            this.recipes = this.recipeService.getRecipes();     
        }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...