Angular 2 - 如何将数据传递给子组件而不渲染子组件两次?

2023-12-07

我想将一个对象从 app.component 传递到子组件(home.component)。我是否使用了错误的路由方式,这就是为什么我想要将对象传递给的子组件被渲染两次?我怎样才能避免它?我想这也可能是第二次渲染组件时该对象未定义的原因。

我已经用谷歌搜索了好几天了,似乎没有任何效果。我正在观看视频教程,但我猜它是基于 Angular 2 RC3 或更早版本的。我正在使用 Angular 2.1.1

如果我删除下面的行,则子组件仅生成一次。但是我无法将对象传递给它。

 <app-home [testdata]="testdata"></app-home>

这是代码:

应用程序组件.ts:

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

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css']
})
export class AppComponent {
  title = 'Welcome';
  testdata = {
    somedata: 'Here is the data'
  };
}

应用程序组件.html:

<header>
  <h1>
    {{title}}
  </h1>
  <nav>
    <ul>
      <li><a routerLink="/" routerLinkActive="active">Home</a></li>
      <li><a routerLink="/directory">Directory</a></li>
    </ul>
  </nav>
</header>
<section id="main">
  <app-home [testdata]="testdata"></app-home>
  <router-outlet></router-outlet>
</section>

home.component.ts:

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-home',
  templateUrl: 'home.component.html',
  styleUrls: ['home.component.css']
})
export class HomeComponent implements OnInit {
  homeTitle = "Welcome to the homepage";
  @Input() testdata: any;

  constructor() {
  }

  ngOnInit() {
  }

}

应用程序.routes.ts:

import { Routes, RouterModule } from "@angular/router";
import { DirectoryComponent } from "./directory/directory.component";
import { HomeComponent } from "./home/home.component";

const APP_ROUTES = [
  { path: '', component: HomeComponent }
];

export const APP_ROUTES_PROVIDER = RouterModule.forRoot(APP_ROUTES);

main.ts:

import './polyfills.ts';

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { environment } from './environments/environment';
import { AppModule } from './app/';
import { APP_ROUTES_PROVIDER } from './app/app.routes';

if (environment.production) {
  enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule, [APP_ROUTES_PROVIDER]);

这是一个已知问题

  • https://github.com/angular/angular/issues/4452

绑定目前不适用于动态添加的组件。 但您可以强制传递数据,例如:

应用程序组件.html

<router-outlet (activate)="activated($event)"></router-outlet>

应用程序组件.ts

activated(comp: any) {
  if(comp instanceof HomeComponent) {
    comp.testdata = this.testdata;
  }
}

笨蛋的例子

这也可能有关

  • 如何将数据注入到从路由器创建的 Angular2 组件中?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 - 如何将数据传递给子组件而不渲染子组件两次? 的相关文章

随机推荐

  • 如何在 R 中导出 HTML 表格并控制线条边框?

    R 中是否有任何函数允许将 HTML 表格导出为 R Markdown 或相关编织文档的一部分 并允许对表格行边框进行详细控制 例如 想象一个这样的矩阵 x lt matrix c M F Good 23 17 Bad 23 4 nrow
  • 将矢量资源导入 Android Studio 时出错

    我在 Illustrator 中创建了一个简单的播放按钮图像 将其保存为 SVG 使用在线 SVG to Drawable 转换器创建该文件的 xml 然后尝试使用 Android Studio 的 Vector Asset 工具将该文件导
  • jQuery DataTables - 子行和“未定义不是函数”

    我正在努力将子行添加到数据表中 但对于在不同表和页面上完美运行的一行代码 出现 类型错误 未定义不是函数 有任何想法吗 HTML div class table responsive h2 class sub header Account
  • 限制滚动和缩放 Google Maps Android API v2

    我已经添加地面叠加层映射并希望限制该区域内的滚动和缩放 如何限制 Android 谷歌地图上的某些范围内的滚动 是否可以从 MapFragment 获取即时运动点 请帮我 约束相机 终于 作为一项功能添加到了发布的版本中谷歌播放服务 9 4
  • Sublime Text 3 sftp插件代理设置

    我已经为 Sublime Text 3 安装了 sftp 插件 是否可以使用代理配置 sftp 我正在寻找任何代理设置 有人知道这件事吗 Use ProxyCommand inside sftp flags 这样的事情对我有用 Destin
  • android NDK可以编译内核模块源吗?

    我想为 android 制作一个动态加载的内核模块 我不想安装linux 我只有cygwin和android NDK 是的 可以使用 NDK 构建内核模块 请注意 这在 Linux 系统上效果最好 据我所知 Linux x86 64 是受支
  • 如何在Scheme中计算一个数的各位数字之和?

    我想计算Scheme中一个数字的数字之和 它应该像这样工作 gt sum of digits 123 6 我的想法是改变数字123串起来 123 然后将其转换为列表 1 2 3 然后使用 apply 1 2 3 to get 6 但不幸的是
  • 在 PHP 中从 MySQL 中提取 BLOB 图像数据

    我正在阅读一些关于如何将图像作为二进制上传到数据库而不是将它们放在服务器本身上的教程 我让它像这样工作 PHP image chunk split base64 encode file get contents tmpfile mysql
  • 批评我的堆调试器

    我编写了以下堆调试器 以演示内存泄漏 双重删除和错误形式的删除 即尝试使用以下命令删除数组 delete p代替delete p 给初级程序员 我很想从强大的 C 程序员那里得到一些反馈 因为我以前从未这样做过 而且我确信我犯过一些愚蠢的错
  • 当启用 Visual-line-mode 时,如何使用 hl-line-mode 仅突出显示一 (1) 行

    有没有人有替代方案或修改方案hl line mode这样只有一 1 条水平线才会突出显示visual line mode已启用 目前 整条自动换行的行都会突出显示 即使它可能跨越几条水平线 我正在使用 Emacs Trunk 的最新版本 您
  • JavaScript Promise 是异步的吗?

    只是一个简单的澄清问题 JavaScript 是Promise异步 我读了很多关于Promise和异步编程 即ajax请求 如果Promise不是异步的 我们如何做到这一点 例如 我有一个函数来包装一个函数f带参数数组args里面一个Pro
  • 具有 DateTimeField 和 timedelta 默认值的 Django 迁移

    我在设置默认值时遇到问题datetime在我的 Django 模型之一上 from django db import models from django utils import timezone class MyModel models
  • System.Drawing 的撤消按钮?

    我正在制作一个图像编辑器 有点为了自己的享受 并且想知道如何制作一个撤消按钮来撤消我上次所做的绘画 我想知道我会如何处理这个问题 教程或示例代码会很好 或者至少能指引我正确的方向 Thanks 呵呵 撤消实际上并不像听起来那么难 这里的神奇
  • 比较双精度数返回 false

    我的数据库中有三个数字 想要在 if 语句中比较它们 我有一个简单的 convert 函数 仅返回双精度数 Public Function RetDbl ByVal obj As Variant As Double On Error Res
  • 设置在 Foreach 循环中默认选中的 RadioButtonFor()

    我有一个奇怪的行为使用 Html RadioButtonFor扩展方法 我正在使用 foreach 循环创建 RadioButton 和 By 三元运算符的列表 我试图将尊重条件的人设置为检查 但它总是最后一个被检查的人 我搜索了类似的问题
  • 如何创建类似于 Twitter 应用程序位置切换按钮的切换按钮?

    我应该使用什么自定义按钮 可以左右滑动 例如 Android 的 Twitter 应用程序上的打开 关闭位置按钮 如下图所示 还有创建此类按钮的任何链接或指南 Thanks 使用一个简单的切换按钮结合一个可绘制状态列表设置为其背景 的一个样
  • 如何在R包RecordLinkage中使用compare.linkage——意外的输出

    我正在使用R包RecordLinkage中的compare linkage函数 得到的结果我知道是错误的 所以我知道我误解了一些东西 我正在使用适用于 x64 Windows 的 R 3 2 3 我对 Stata 非常熟悉 但对 R 不太熟
  • 在 Powershell 中计算日志结果

    我有一项任务 必须从 Windows 安全日志文件中提取 审核失败 和 审核成功 等信息 并计算每个 ex 的结果 总尝试次数 成功次数 失败次数和最常见的事件 ID 我将 csv 保存到桌面以获取信息 但我不确定如何获取每个文件的运行总计
  • 有关 Django 中字段类型的问题

    我是 Django 新手 我想在 Django 中制作一个用户注册表单 创建模型时 我为密码字段提供了 fieldtype gt PasswordField 但是当我将此模型运行到终端时出现错误 password models Passwo
  • Angular 2 - 如何将数据传递给子组件而不渲染子组件两次?

    我想将一个对象从 app component 传递到子组件 home component 我是否使用了错误的路由方式 这就是为什么我想要将对象传递给的子组件被渲染两次 我怎样才能避免它 我想这也可能是第二次渲染组件时该对象未定义的原因 我已