несоответствия служб угловых компонентов visual studio

#angular #typescript #visual-studio

Вопрос:

Я следую угловому курсу во второй раз, но теперь в visual studio вместо vs code, потому что я собираюсь добавить серверную часть c#.

Однако мне снова кажется, что я борюсь. Я не знаю, в чем именно заключается проблема, и даже не знаю, как ее назвать или погуглить.

Поэтому в настоящее время я изучаю внедрение зависимостей и услуги

Поэтому я сделал услугу с некоторыми вещами внутри.

В своем компоненте я ввел службу и попытался вызвать что-то в своем сервисе, однако оно не было указано в моем intellisense, поэтому я попытался просто ввести его, но все же получил подчеркнутую красным ошибку — > очень странно.

Я попытался очистить свое решение, а затем построить, и каким-то образом оно исправилось.

Теперь я снова сделал отправитель событий в службе, не указанной в моем intellisense, и компонент не распознает метод.

моя служба:

 import { EventEmitter } from '@angular/core';
import { Recipe } from './recipe.model';

export class RecipeService {

  recipeSelected = new EventEmitter<Recipe>();

  private recipes: Recipe[] = [
    new Recipe('A test recipe', 'simple test', 'https://www.maxpixel.net/static/photo/1x/Meat-Recipe-Duck-Tasty-Fry-Food-Duck-Breast-4813261.jpg'),
    new Recipe('A test recipe', 'simple test', 'https://www.maxpixel.net/static/photo/1x/Meat-Recipe-Duck-Tasty-Fry-Food-Duck-Breast-4813261.jpg')
  ];

  getRecipes() {

    return this.recipes.slice();
  }

}
 

Здесь, в моем сервисе, у меня есть intellisense как для моей функции getter getRecipes (), так и для рецептов, которые являются частными, что странно, но у меня нет intellisense для выбранных рецептов.

мой компонент я использую сервис.

 import { Component, OnInit, Input } from '@angular/core';
import { Recipe} from '../../recipe.model'
import { RecipeService } from '../recipe.service';

@Component({
  selector: 'app-recipe-item',
  templateUrl: './recipe-item.component.html',
  styleUrls: ['./recipe-item.component.css']
})
export class RecipeItemComponent implements OnInit {

  @Input() recipe: Recipe;

  constructor(private recipeService: RecipeService) { }

  ngOnInit() {

  }

  onSelected() {

     
  }

}
 

я пытаюсь добавить источник событий в выбранный метод.

Кто-нибудь знает об этом странном поведении ge и что я могу с этим поделать?

Я должен сказать, что у меня также установлен resharper в качестве web essentials.

Комментарии:

1. Предупреждаю: я заменил ваш тег C# на тег TypeScript, поскольку ваш вопрос относится к TypeScript, а не к C#.

2. Typescript-это не совсем C# так , и идентификатор доступа по умолчанию , если он не указан, таков public , поэтому нормально, что вы можете видеть getRecipes доступный, потому что он есть. В RecipeItemComponent тебе есть только onSelected обработчик, я его не вижу EventEmitter .

3. Да, я знаю, что в этом-то все и дело. в моем компоненте у меня были только рецепты, которые являются частными, а НЕ getRecipes (), которые действительно являются общедоступными, а НЕ выбранными рецептами, которые являются общедоступными, что странное поведение, Почему я даже вижу рецепты, для которых установлено значение private. когда в моем компоненте я делаю this.recipeService.Выбранные рецепты, у меня есть красное подчеркивание

4. Что вы видите при наведении красного подчеркивания при доступе this.recipeService.recipeSelected ? В чем сообщение об ошибке?

5. свойство «Выбранные рецепты» не существует в «Службе рецептов».

Ответ №1:

Вы не настроили свой сервис для инъекций. Система DI Angular требует добавления аннотаций для службы, которая будет введена в компонент

 @Injectable({
  providedIn: 'root',
})
export class RecipeService {
 

Комментарии:

1. Хм, довольно странно, нигде в курсе не говорится, что я должен использовать инъекционные препараты, но я проверил документацию по угловым. Я предполагаю, что есть разница между углом 4 и углом 12, которую курс расширил до него. Однако это не меняет ошибку, я добавил вводимую, но ту же ошибку даже после перестройки проекта.

2. root не было возможности в более ранних версиях, но providers массив работает во всех версиях. Кстати, этот курс звучит немного устаревшим, v4 с 2016 года

3. yzes я прошел курс еще в 2017 году, и теперь, когда он обновлен до v12, я делаю это снова. но все равно это не работает в intellisense, я попытался сегодня удалить caache visual studio, но и в этом тоже не повезло

4. БОЖЕ, я обнаружил проблему, такую глупую с моей стороны, по-видимому, у меня было 2 службы, одна из которых содержала компонент корневого рецепта, а другая-компонент списка, который я забыл удалить, так что, очевидно, это был импорт, и, очевидно, мой код был в другом компоненте 🙁