【问题标题】:Unable to fetch the input property value- Angular无法获取输入属性值 - Angular
【发布时间】:2018-09-30 00:52:45
【问题描述】:

tod​​o.component.ts

import { Component, OnInit } from '@angular/core';
import{ TaskService } from './../task.service';
@Component({
  selector: 'app-todo',
  templateUrl: './todo.component.html',
  styleUrls: ['./todo.component.css']
})
export class TodoComponent implements OnInit {
  chosenstatus="todo";
  todoService:TaskService;
  constructor(toDoS:TaskService) { 
    this.todoService=toDoS;
  }

  ngOnInit() {
  }

}

tod​​o.component.html

<app-task [sts]="chosenstatus"></app-task>   

task.component.ts

import { Component, OnInit, Input } from '@angular/core';
import { TaskService } from './../task.service';
@Component({
  selector: 'app-task',
  templateUrl: './task.component.html',
  styleUrls: ['./task.component.css']
})
export class TaskComponent implements OnInit {
@Input() sts;
  todoService;
  constructor(toDoS:TaskService) { console.log(this.sts) /*here it shows undefined*/
    this.todoService=toDoS.getTasklist(this.sts);
  }

  ngOnInit() {
  }

}

task.service.ts

export class TaskService {
   tasklist= [{taskname:"sample task",taskdetail:"This is a test task",status:"todo"}];
   filteredtask;
  constructor() { }
  getTasklist(chosenstatus){
    return this.tasklist.filter((e)=>{
      console.log('ngf'+chosenstatus); /*here it shows undefined*/
        if(e.status==chosenstatus){

          return e;

        }
    });

  }

  addTask(name,task){
    this.tasklist.push({taskname:name,taskdetail:task,status:'todo'});
  }



}

我通过 Input 属性将变量 (chosenstatus) 从 todo 组件传递到任务组件,但它没有被发送。它显示未定义。请说出我做错了什么。

【问题讨论】:

  • 你能创建一个 plunker 或 stackblitz 来显示错误

标签: angular input components


【解决方案1】:

在您的任务组件中,而不是在构造函数中,尝试:

ngAfterViewInit() {
    this.todoService=toDoS.getTasklist(this.sts);
}

【讨论】:

    【解决方案2】:

    使用 ngOnInit 代替构造函数。

    ngOnInit() { 
        console.log(this.sts) ;
        this.todoService=toDoS.getTasklist(this.sts);
      }
    

    【讨论】:

    • 好的,但为什么呢?当这个组件被初始化时,即使是构造函数也应该运行它。
    • @YoYo,理想情况下,您应该只处理constructor() 中的初始化,看看这个:angular.io/guide/lifecycle-hooks#lifecycle-sequence。无论如何,它成功了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多