2017-02-09 12 views
1

Прежде всего, я изучаю Угловое с Угловым CLI, Foundation и JQuery, поэтому я все еще новичок в этой теме, он частично работает, я могу получить информацию из моей базы данных, примените фильтр, чтобы показывать только те контакты, в которых они имеют одну и ту же категорию, и без каких-либо проблем показывать всю информацию о контакте ... но у меня возникла ошибка при создании нового делового контакта с моей базой данных firebase, но когда я пытаюсь представить его показать эту ошибку:Невозможно прочитать значение свойства «неопределенного» Углового CLI

EXCEPTION: Error in ./AppComponent class AppComponent - inline template:194:6 caused by: Cannot read property 'value' of undefined 

и я не понимаю, почему это происходит ...

Вот мой код:

От firebaseService:

import { Injectable } from '@angular/core'; 
import { AngularFire, FirebaseListObservable } from 'angularfire2'; 
import 'rxjs/add/operator/map'; 
import { Business } from '../business'; 
import { Category } from '../category'; 

@Injectable() 
export class FirebaseService { 
    business: FirebaseListObservable<Business[]>; 
    categories: FirebaseListObservable<Category[]>; 

    constructor(private _af: AngularFire) { 
    } 

    getBusiness(categories: string = null){ 
     if(categories != null && categories != '0'){ 
      this.business = this._af.database.list('/business', { 
       query: { 
        orderByChild: 'category', 
        equalTo: categories 
       } 
      }) as FirebaseListObservable<Business[]> 
     }else{ 
      this.business = this._af.database.list('/business') as FirebaseListObservable<Business[]> 
     } 
     // this.business = this._af.database.list('/business') as FirebaseListObservable<Business[]> 
     return this.business; 
    } 

    getCategory(){ 
     this.categories = this._af.database.list('/categories') as FirebaseListObservable<Category[]> 
     return this.categories; 
    } 

    //this part it doesn't send the new contact  
    addBusinessContact(newbusiness){ 
     return this.business.push(newbusiness); 
    } 
} 

и от app.component.ts:

import { Component, OnInit } from '@angular/core'; 
import { AngularFire, FirebaseListObservable } from 'angularfire2'; 
import { FirebaseService } from './services/firebase.service'; 
import { Business } from './business'; 
import { Category } from './category'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'], 
    providers: [FirebaseService] 
}) 
export class AppComponent implements OnInit { 

    constructor(private _firebaseService: FirebaseService) { 

    } 
    busiRes: Business[]; 
    cateRes: Category[]; 
    FilterBusiness: Business[]; 

    appState: string; 
    activeKey: string; 

    ngOnInit() { 
    this._firebaseService.getBusiness().subscribe(busi => { 
     console.log(busi); 
     this.busiRes = busi; 

    }); 
    this._firebaseService.getCategory().subscribe(cate => { 
     console.log(cate); 
     this.cateRes = cate; 
    }); 
    } 

    changeState(state, key) { 
    console.log("Changing state to: " + state); 
    if (key) { 
     console.log("Changing Key: " + key); 
     this.activeKey = key; 
    } 
    this.appState = state; 
    } 

    filterCategory(category) { 
    this._firebaseService.getBusiness(category).subscribe(busi => { 
     console.log(busi); 
     this.busiRes = busi; 
    }); 
    } 

    addBusiness(
    company: string, 
    category: string, 
    years_in_business: string, 
    description: string, 
    phone: string, 
    email: string, 
    street_address: string, 
    state: string, 
    zpicode: string) { 

    var created_at = new Date().toString(); 
    var newBusinessContact =  { 
     company: company, 
     category: category, 
     years_in_business: years_in_business, 
     description: description, 
     phone: phone, 
     email: email, 
     street_address: street_address, 
     state: state, 
     zpicode: zpicode, 
     created_at: created_at 
    }; 
    console.log(newBusinessContact); 

    this._firebaseService.addBusinessContact(newBusinessContact); 

    } 

} 

app.component.html

<div class="top-bar"> 
    <div class="row"> 
    <div class="top-bar-left"> 
     <ul class="menu"> 
     <li class="menu-text">BusinessContacts</li> 
     </ul> 
    </div> 
    <div class="top-bar-right"> 
    </div> 
    </div> 
</div> 
<br> 
<div class="row"> 
    <div class="large-6 columns"> 
    <button class="button" (click)="changeState('add')">Add Business</button> 
    </div> 
    <div class="large-6 columns"> 
    <label> 
     Filter category 
     <select (change)="filterCategory(filteredCategory.value)" #filteredCategory> 
     <option value="0">Select</option> 
     <option *ngFor="let category of cateRes" value="{{category.name}}">{{category.name}}</option> 
     </select> 
    </label> 
    </div> 
</div> 
<!--in this part it helps to show/hide the extra content of the contacts, 
when the user selects the contact it appears a new window to show the 
information of the contact--> 
<div *ngIf="appState == 'extend'"> 
    <div class="row"> 
    <div class="large-12 columns"> 
     <button class="button alert" (click)="changeState('default')">Go Back</button> 
    </div> 
    </div> 
    <!--it show all the extra information of the contact from the database--> 
    <div *ngFor="let busine of busiRes"> 
    <div *ngIf="busine.$key == activeKey"> 
     <div class="row"> 
     <div class="large-5 columns large-offset-1"> 
      <h3> 
      {{busine.company}} 
      </h3> 
      <p> 
      Category: {{busine.category}} 
      </p> 
      <p> 
      Years in Business: {{busine.years_in_business}} 
      </p> 
      <p> 
      {{busine.description}} 
      </p> 
     </div> 
     <div class="large-5 columns large-offset-1"> 
      <h3> 
      Contact Info 
      </h3> 
      <p> 
      Phone: {{busine.category}} 
      </p> 
      <p> 
      Email: {{busine.email}} 
      </p> 
      <p> 
      Street Address: {{busine.street_address}} 
      </p> 
      <p> 
      City: {{busine.city}} 
      </p> 
      <p> 
      State: {{busine.state}} 
      </p> 
      <p> 
      ZipCode: {{busine.zpicode}} 
      </p> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 
<!-- /////////////////////////////////////////ERROR///////////////////////////////////////// --> 
<!-- /////////////////////////////////////////ERROR///////////////////////////////////////// --> 
<!-- /////////////////////////////////////////ERROR///////////////////////////////////////// --> 
<!-- form to create a new business contact to the firebase--> 
<div *ngIf="appState == 'add'"> 
    <div class="large-12 columns"> 
    <h3> 
     Add Business 
    </h3> 
    <form (submit)="addBusiness(
     company.value, 
     category.value, 
     years_in_business.value, 
     description.value, 
     phone.value, 
     email.value, 
     street_address.value, 
     state.value, 
     zpicode.value 
    )"> 
     <div class="row"> 
     <div class="large-6 columns"> 
      <label> Company 
      <input type="text" placeholder="Company Name" #company> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label> 
      Category 
      <select #category> 
       <option value="0">Select</option> 
       <option *ngFor="let category of cateRes" value="{{category.name}}">{{category.name}}</option> 
      </select> 
      </label> 
     </div> 
     </div> 
     <!----> 
     <div class="row"> 
     <div class="large-6 columns"> 
      <label> Years in Business 
      <input type="text" placeholder="Years in Business" #years_in_business> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label> 
      <textarea #description></textarea> 
      </label> 
     </div> 
     </div> 
     <!----> 
     <div class="row"> 
     <div class="large-6 columns"> 
      <label> Phone 
      <input type="text" placeholder="Company Name" #company> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label> 
      Email 
      <input type="text" placeholder="Email" #email> 
      </label> 
     </div> 
     </div> 
     <!----> 
     <div class="row"> 
     <div class="large-6 columns"> 
      <label> Street Address 
      <input type="text" placeholder="Company Name" #company> 
      </label> 
     </div> 
     <div class="large-6 columns"> 
      <label> 
      State 
      <input type="text" placeholder="State" #state> 
      </label> 
     </div> 
     </div> 
     <!----> 
     <div class="row"> 
     <div class="large-6 columns"> 
      <label> Street Address 
      <input type="text" placeholder="Zip Code" #zpicode> 
      </label> 
     </div> 
     </div> 
     </form> 
    </div> 
    <div class="row"> 
    <div class="large-12 columns"> 
     <input type="submit" class="button" value="Submit"> <!-- error --> 
    </div> 
    </div> 
</div> 
<!-- /////////////////////////////////////////END ERROR///////////////////////////////////////// --> 
<!-- /////////////////////////////////////////END ERROR///////////////////////////////////////// --> 
<!-- /////////////////////////////////////////END ERROR///////////////////////////////////////// --> 
<!--it show all the business contacts from the firebase in only company, category and phone--> 
<div class="row"> 
    <div class="large-12 columns"> 
    <div *ngIf="busiRes"> 
     <table> 
     <thead> 
      <tr> 
      <th>Company</th> 
      <th>Category</th> 
      <th>Phone</th> 
      <th></th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr *ngFor="let busin of busiRes"> 
      <td> 
       {{busin.company}} 
      </td> 
      <td> 
       {{busin.category}} 
      </td> 
      <td> 
       {{busin.phone}} 
      </td> 
      <td> 
      <!-- when is clicked it shows a window to show all information of the contact --> 
       <button class="button" (click)="changeState('extend', busin.$key)">More</button> 
       <button class="button secondary">Edit</button> 
       <button class="button alert">Delete</button> 
      </td> 
      </tr> 
     </tbody> 
     </table> 
    </div> 
    </div> 
</div> 

ответ

1

На первый взгляд, у вас есть ошибочно отметили два поля в вашем шаблоне как #company. Поэтому они (phone и street_address) не существуют и «не определены» при попытке отправить.

Try заменяя:

... 
<div class="row"> 
    <div class="large-6 columns"> 
     <label> Phone 
     <input type="text" placeholder="Company Name" #phone> <!-- HERE --> 
     </label> 
    </div> 
    <div class="large-6 columns"> 
     <label> 
     Email 
     <input type="text" placeholder="Email" #email> 
     </label> 
    </div> 
    </div> 
    <!----> 
    <div class="row"> 
    <div class="large-6 columns"> 
     <label> Street Address 
     <input type="text" placeholder="Company Name" #street_address> <!-- HERE --> 
     </label> 
    </div> 

... 

Там могут быть и другие вопросы, но это то, что выскакивает на меня.

+1

... Спасибо ... Я не понимал, что часть ... это было действительно глупо от меня ... спасибо –