2017-02-17 6 views
0

Просто с небольшим количеством трудностей передайте параметр (id) маршрутизатора в ngForm, а затем на эмитент событий. Вот как я получаю идентификатор - так как вы можете видеть, что первый console.log работает нормально, я могу получить идентификатор от маршрутизатора. Теперь я пытаюсь присвоить это мой singleOpenHome объекта (но получить неопределенную ошибку):Angular2 - передать параметру маршрутизатора как переменной в ngForm

@Input() singleOpenHome: OpenHomeModel; 

ngOnInit() { 
     // Get the slug on it from the router 
     this.route.params.forEach((params: Params) => { 
      let id = params['propertyID']; 
      console.log('id on the child is:'+id); 
      //this.singleOpenHome.propertyID == id; Cannot read property 'propertyID' of undefined 
     }); 
    } 

Теперь я хотел передать это в форме:

<form class="my2" #form="ngForm" (ngSubmit)="handleSubmit(form.value, form.valid)" novalidate></form> 

Вот мой emmitter событие:

@Output() 
    update: EventEmitter<OpenHomeModel> = new EventEmitter<OpenHomeModel>(); 

    constructor(private route: ActivatedRoute) {} 

    handleSubmit(sinlgeOpenHome: OpenHomeModel, isValid: boolean) { 
     if (isValid) { 
      this.update.emit(sinlgeOpenHome); 
     } 
    } 

Любая помощь оценили

+0

Все ли коды, которые вы указали, принадлежат одному компоненту? Если да, просто назначьте параметр route для свойства класса - 'this.id = params ['propertyID'];' - тогда вы можете получить доступ к свойству из любого места в компоненте или его шаблоне. – AngularChef

+0

Пробовал это: this.singleOpenHome.propertyID = params ['propertyID']; Но я не могу показать значение в шаблоне, как {{singleOpenHome.propertyID}} не будет работать. – rhysclay

+0

Не понимаю. Почему бы вам не попробовать код, который я предложил? Все ли коды, которые вы показали, принадлежат одному и тому же компоненту? – AngularChef

ответ

1

я испытал проблемы, непосредственно связанные с преобразования route.paramsObservable в Promise который является чем-то forEach. Рассмотрим просто с помощью subscribe

ngOnInit() { 
    // Get the slug on it from the router 
    this.route.params.subscribe(params => { 
    const id = params['propertyID']; 
    console.log(`id on the child is: ${id}`); 
    }); 
} 

Это выглядит линия как опечатка

this.singleOpenHome.propertyID == id; 

Вы выполняете сравнение вместо присваивания.

Это значит, что у вас могут быть другие ошибки, которые приводят к неопределенности свойства. Поскольку он помечен как вход, я предполагаю, что он исходит из внешней привязки. Убедитесь, что значение, которое вы передаете в это привязку, правильно инициализировано.

+0

Вы настолько правы - я не выполнил свои привязки правильно, у меня есть родительский контейнер, который должен инициализировать объект singleOpenHome и передать его в его дочерний компонент, то я могу назначить переменную propertyID (но я передам ее с привязкой от родителя) – rhysclay