Error in Angular 2: Unable to connect to 'customer' as it is not recognized as a property of 'my-customer'

I have encountered an issue while following an outdated tutorial by John Papa and Buddy Ward. Despite reading various Stack Overflow posts, I still can't resolve the problem. The solution suggested avoiding the use of directives: in my component and instead utilizing the declarations: property in the main module. Unfortunately, this did not work for me. Below is the error message from the console along with the relevant code snippet. Any assistance would be greatly appreciated. Thank you!

customer.component.ts

import { Component, Input, OnInit } from '@angular/core';

@Component({
    selector: 'app-customer',
    templateUrl: 'app/customer/customer.component.html'
})

export class CustomerComponent implements OnInit {
    @Input() customer: {id: number, name: string};

    constructor() { }

    ngOnInit() { }
}

customer.component.html

<span [style.color]="deansColor">{{customer.id}}</span>
        &nbsp;
<span>{{customer.name}}</span>

app.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule }   from '@angular/forms';
import { AppComponent }  from './app.component';
import { CustomerComponent } from "./customer/customer.component";

@NgModule({
  imports:      [ BrowserModule, FormsModule ],
  declarations: [ AppComponent, CustomerComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

app.component.ts

import { Component } from '@angular/core';
import { CustomerComponent } from './customer/customer.component';

@Component({
  selector: 'my-app',
  templateUrl: 'app/app.component.html'
})
export class AppComponent  { 

  title = "Welcome to Dean's World of Angular..."; 
  heading = 'Enjoy your stay!'
  deansColor = 'red';
  customers = [
    {id: 1, name: "Dean"},
    {id: 2, name: "Daryl"},
    {id: 3, name: "Lee"},
    {id: 4, name: "Josh"},
    {id: 5, name: "Gerald"},
  ];

  changeHeadingColor() {
    this.deansColor = this.deansColor === 'blue' ? 'red' : 'blue';
      }

}

app.component.html

<h1>{{title}}</h1>

<!--property binding-->
<div [style.color]="deansColor">
    {{heading}}
</div>

<!--event binding-->
<button (click)="changeHeadingColor()"> 
    Change Heading Color
</button>

<!--two way data-binding (approach #1)-->
<input type="text" [value]="heading" (keyup.enter)="heading = $event.target.value"> 

<!--two way data-binding (approach #1)-->
<input type="text" [(ngModel)]="heading">

<br/>

<ul>
    <li *ngFor="let c of customers">     
        <my-customer [customer]="c"></my-customer>   
    </li>
</ul>

Error

Unhandled Promise rejection: Template parse errors:
Can't bind to 'customer' since it isn't a known property of 'my-customer'.

Answer №1

The selector you've chosen is incorrect.

Consider using the following:

<app-client [client]="cl"></app-client>

Answer №2

To make a change in the customer.component.ts file, replace selector: 'app-customer' with selector: 'my-customer'. Additionally, I believe that the

<span [style.color]="deansColor">...</span>
should adjust its color based on the definition of deansColor within the parent component.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

After verifying the variable is an Array type, it is ideal to utilize the .forEach()

Within my generic functional component, I have the following code snippet: if(Array.isArray(entry[key as keyof T]) { entry[key as keyof T].forEach((item: T) => { ... }); } The variable key is a string that dynamically changes. However, when attempt ...

Ways to resolve the Ionic v1 deprecation error problem

I am facing a problem with an Ionic v1 deprecation error, causing it to not work properly. ionic build ios ionic emulate android The basic commands are failing to produce the desired outcome. Is there a way to resolve this issue? Note: My application is ...

Utilizing Angular 7 to implement table and pagination as separate entities, with distinct components

After referencing the link at https://material.angular.io/components/table/overview, I successfully implemented pagination, sort, and filter properties on a table. Now, I am looking to create a separate component specifically for pagination that will int ...

Can you explain the mechanism behind how the spread syntax (...) interacts with mapGetters?

When implementing a computed getter using the mapGetter helper from Vuex, the syntax typically involves using the spread operator in the following way: ...mapGetters([ 'getter1', 'getter2', 'etc' ]) Although th ...

What is the best way to change the value in a ReplaySubject?

I am looking to retrieve the current value and invert it: private controlActive$ = new ReplaySubject<Tool>(); if(this.type === "A") { this.controlActive$.next(!this.controlActive$.getValue()); } Is there a more eloquent way to achieve this? ...

Breaking an array in JavaScript

I'm developing a pure JavaScript hangman game and facing an issue with splitting words from an array into single letters. When I split the array, I get "," for every letter. For example, when I split the word [station], it returns "s,t,a,t,i,o,n". M ...

Utilizing jQuery and JSON to showcase the contents of an array

My goal is to display all the items in an array by utilizing JSON and jQuery from the Song of Ice and Fire API. Currently, I am only able to display one item from each of the arrays. If you want to view the codepen, click here: https://codepen.io/frederic ...

What could be causing my hidden divs to automatically appear on the webpage?

I am facing an issue with two hidden divs, named hidden_div and hidden_divX, that are supposed to appear when the respective checkbox is clicked. I have implemented two separate functions for this purpose, however, only the first hidden div works as intend ...

Search for records in MySQL using Typeorm with the condition "column like %var%" to retrieve results containing the specified

Looking for a way to search in MySql using typeorm with the "column like" functionality. async findAll({ page, count, ...where }: CategorySelectFilter): Promise<Category[]> { return this.categoryRepository.find({ where, ...

Refresh and storing canvas after submitting form

Before submitting a form, I am executing the following code. The process involves changing an image and then redrawing a canvas before saving it. Unfortunately, the issue is that the saved image does not reflect the changes made (it still shows the previ ...

Is there a way to dynamically switch between AngularJS modules based on a configuration change?

Understanding the inner workings of Dependency Injection with AngularJS modules has sparked an idea in my mind. I thought about leveraging this concept to switch between different modules based on the environment of the application. For instance, I aim to ...

Header input for searching in a different section of the page

I am working on a project where I have a Header component containing an Input element. My goal is to search within an array located in another component, specifically the product list component. Both of these components are connected through App.js. How ...

Can someone please provide a reference to an online illustration of implementing TinyMCE with a print format similar to Microsoft Word

Are there any online resources demonstrating the use of TinyMCE with a print layout resembling Word, with visible page breaks? Alternatively, are there any other WYSIWYG editors with a built-in print layout feature available for open source use? ...

Running an Angular 4 application on a centOS server

I am looking to deploy my Angular 4 Application on my CentOS Server for the first time. Following recommendations from various threads, I have already installed Apache on it. I understand that I need to run ng build --prod to generate a dist file that ca ...

The origin of the Angular img src becomes blurred when invoking a function

I want to dynamically change the image src by calling a function that returns the image path. However, when I attempt to do so using the code below, the image element displays as <img src(unknown)/> component.ts: getMedia(row) { this.sharedData ...

The modal popup will appear in the center of the screen when the scrollbar is positioned at the top

I have a modal popup that is not consistently displayed in the center of the screen, regardless of the scrollbar position. I always want it to render at the center so the user doesn't need to scroll to see it. Below is the code I am currently using: ...

ngFor dynamically updates on its own

Here is a sample code snippet from the list-components: list.components.ts import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal'; import { EditModalComponent } from "...../edit-modal.component"; @Component({ selector: 'list& ...

Embedding a module within a fluid element

Creating a dynamic component and projecting template inside it can be done easily with the following code snippet - @Component({ selector: 'dynamic', template: ` <p>Dynamic Component</p> <ng-content></ ...

What could be causing the href to malfunction within nav tabs in Bootstrap version 4?

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstra ...

Enhance your Three.js development with TypeScript autocomplete

In my project using Node.js, Typescript, and Three.js, I have set up the commonjs syntax for module imports in my tsconfig.json file like this: { "compilerOptions": { "module": "commonjs" } } I installed Three.js via NPM and created a typescript ...