#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 службы, одна из которых содержала компонент корневого рецепта, а другая-компонент списка, который я забыл удалить, так что, очевидно, это был импорт, и, очевидно, мой код был в другом компоненте 🙁