2016-07-20 5 views
0

Я пытаюсь передать значение из файла html в свой компонент, а затем добавить его в свой URL-адрес канала json.Передача переменной в angular2

Мне удалось получить его в компоненте и распечатать в html-файле, но U не может подключить его к концу моего json-канала.

Этот компонент и HTML файл прямо из anguler2 кли

app.component.ts

import { Component } from '@angular/core'; 
import {Http} from '@angular/http'; 
import {HTTP_PROVIDERS} from '@angular/http'; 

@Component({ 
    moduleId: module.id, 
    selector: 'app-root', 
    templateUrl: 'app.component.html', 
    styleUrls: ['app.component.css'] 
}) 
export class AppComponent { 
    title = 'app works!'; 

    values = ''; 
    onKey(value: string) { 
    this.values = value + ''; // pass this value to the url below 
    } 


    people: Array<Object>; 
    constructor(http:Http) { 
     http.get('http://myurl.com/json_feed.php?q=' + this.values) // get the value from above 
     .subscribe(res => { 
     this.people = res.json(); 
     }) 
    } 

} 

app.component.html

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

<input #box (keyup)="onKey(box.value)"> 

{{values}} 

<ul *ngFor="let person of people"> 
    <li class="text"> 
    {{person.model}} 
    </li> 
</ul> 
+0

Выглядит немного странно. Код 'http.get (...)' выполняется как первое, когда компонент создается, но 'onKey (...)' выполняется только позже, когда нажата клавиша. Это не сработает. Вам нужно переместить 'http.get ...' в 'onKey()' где 'values' обновляется. –

+0

Я попытался поместить конструктор в функцию onKey, но он дает ошибку, говоря «не могу найти конструктор», я новичок в машинописном тексте, и у него есть некоторые странные gotchas – Jason

+1

Я не имел в виду конструктора. Я имел в виду содержание конструктора. Вы не можете переместить конструктор внутри другого метода. –

ответ

0

Как сказал Гюнтер Цохбауэр, конструктор выполняется во время построения компонента, и вы не можете использовать его для обновления значений. Вы должны сделать что-то вроде этого:

export class AppComponent { 

    ... 

    values = ''; 

    onKey(value: string) { 

    this.values += value + ''; 

    getData(); // call getData method 
    } 

    people: Array<Object>; 

    constructor(public http: Http) { 

    } 

    getData(){ 

     this.http.get('http://myurl.com/json_feed.php?q=' + this.values) 
     ... 

    }) 
    } 

} 

Также обратите внимание на ваш запрос HTTP не будет работать, если вы не предоставите HTTP_PROVIDERS при начальной загрузке приложения в main.ts.

+0

. Наконец, я получил его для работы с конструктором (http: Http) {this.http = http; } и getData() { \t \t this.http.get ('http://myurl.com/json_feed.php?q=' + this.values) ...}) – Jason

+0

Хорошо, я обновил ответ также показывая правильное использование http-провайдера. Привет, – robisim74

+0

Привет, нам просто нужно 'this.http = http;' в конструкторе или он не будет работать конструктор (public http: Http) {this.http = http; } ' – Jason

2

Это неправильно синтаксис для добавления значения в поток. this.values = value + '';

Что он делает, это переопределение старых значений снова и снова. Поэтому правильный код this.values = this.values + value + '';

+0

Отличный улов! Я не понимаю, как это связано с «потоком». Наверное, вы имели в виду 'string'. –

+0

К сожалению, это добавление к {{values}}, но не будет изменено при удалении и не передаст значение URL-адресу – Jason

Смежные вопросы