Angular2 使用 @Inputs 和 s

2024-01-09

我的页面中有一个子导航,它在公共主视图下方显示一些子视图。我想通过将一个对象传递给子视图<router-outlet>这样我就可以在主组件中检索数据一次,然后与我的子组件共享它。

注意:如果我包含该指令<one></one> in the 主要.html它有效,但这不是我想要的行为。

主视图:

<h1>Details</h1>   
<a [router-link]="['./sub1']">One</a> | 
<a [router-link]="['./sub2']">Two</a> | 
<a [router-link]="['./sub3']">Three</a>   
<hr/>  
<router-outlet [data]="maindata"></router-outlet>

子视图 1:

<h2>{{ data.name }}</h2>
...

主视图:

@Component({
    selector: 'main-detail',
    directives: [ROUTER_DIRECTIVES],
    templateUrl: './main.html'
})
@RouteConfig([
    { path: '/', redirectTo: '/one' },
    { path: '/one', as: 'One', component: OneComponent },
    { path: '/two', as: 'Two', component: TwoComponent },
    { path: '/three', as: 'Three', component: ThreeComponent }
])
export class MainComponent {
    maindata: Object = {name:'jim'};
}

子视图 1:

@Component({
    selector: 'one',
    directives: [CORE_DIRECTIVES],
    inputs: ['data'],
    templateUrl: './one.html'
})
export class OneComponent {
    @Input() data;
}

如果是简单数据,您可以传递它们路由参数 https://angular.io/docs/ts/latest/api/router/RouteParams-class.html

<a [router-link]="['./sub3'],{name:'jim'}">Three</a>

然后在你的子视图中

@Component({
    selector: 'one',
    directives: [CORE_DIRECTIVES],
    templateUrl: './one.html'
})
export class OneComponent {
    data: any;
  constructor(params: RouteParams){
    this.data = params.get('data');
  }
}

您还可以通过将 RouterConfig 移动到组件内部来设置路由始终从组件传递参数(注意,这不是通常的做法):

export class AppCmp {
  history: string[] = [];
  constructor(public list: PersonalizationList,
              private router_: Router) {
    list.get('histoy', (response) => {
      this.history = response;
    });
    router_.config([
      { path: '/', component: HomeCmp, as: 'Home', data: this.history },
      { path: '/about', component: AboutCmp, as: 'About' }
    ]);
  }
}

归功于来源 https://stackoverflow.com/a/34290879/1251604

如果您要做一些更复杂的事情,我建议使用服务在路由/组件之间进行通信。这实际上是我更喜欢的方式。

样品服务:

import {Injectable} from 'angular2/angular2';

@Injectable()
export class CarsService {
  list1: array<any> = ['a','b','c','d'];
  list2: array<any>;

  constructor() {
    this.list2 = [1,2,3,9,11];
  }
}

如何注入服务:

export class Cars {
  constructor(cars:CarsService) {
    this.cmpList1 = cars.list1;
    this.cmpList2 = cars.list2;
  }
}

这样,您就可以使用该服务进行通信,而无需考虑父母/孩子或其他奇怪的限制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular2 使用 @Inputs 和 s 的相关文章

随机推荐

  • Dojo MVC 的简单登录实现

    有没有关于如何实现简单的登录页面 对话框的示例 我一直在尝试使用 dojo 样板来做到这一点 检查我之前的问题 Dojo MVC 的布局实现 https stackoverflow com questions 10953316 layout
  • 更新会话变量而不刷新页面[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当单击 iframe 外部页面 中的链接时 我需要更新第 1 页上的会话变量 当我点击 iframe 的链接时 会话变量已成功设置 问题是
  • 如何读取.net core api项目中appsetting.json文件中的多个连接字符串

    我有多个连接字符串属性 例如 在 AppSetting json 文件中 connectionstring connection1 datasource1 connection2 datasource2 我想读取控制器或服务文件中的连接字符
  • Phalcon Multi module - 动态模块注册

    大家好 我在 Phalcon 的多模块项目中使用以下结构 modules module1 controllers models views module2 controllers models views module n controll
  • 无法使用 Nuitka 编译 Python

    我正在尝试编译使用 urllib request BeautifulSoup 和 网页浏览器 nuitka python py Nuitka WARNING python py 16 Cannot find urllib request a
  • 使用 Add-on SDK 的 Firefox 插件提供更多存储空间

    我想使用插件生成器开发一个插件 我读到 通过简单的存储 一个人的插件可以有大约 5 MB 的空间 但 5 mgb 的空间不足以容纳我的应用程序 我需要更多 我能做什么 考虑到附加 SDK API 您无法做太多事情 相反 你可以冲出沙箱 ht
  • 什么时候应该在 OCaml 中使用对象?

    通常 OCaml 程序可以使用或不使用对象来编写 什么时候使用物品最有利 什么时候应该避免使用物品 作为一般经验法则 不要使用对象 它们带来的额外复杂性通常并不值得 我认为这也是适用于其他语言的规则 但那是另一回事了 至少对于 OCaml
  • 显示本地时间的 MySQL 时间戳

    我有一个 MySQL 数据库 其中存储的大量数据均采用 UTC 时间的时间戳 当用户查询该数据库时 我希望他们能够在本地时区查看数据 我不想每次都计算偏移量并使用 PHP 代码更改时间戳 还有其他办法吗 您可以使用localtime htt
  • android ellipsize 多行textview

    我需要省略多行文本视图 我的组件足够大 可以用椭圆显示至少 4 条线 但只显示 2 条线 我尝试更改组件的最小和最大行数 但它没有任何改变 这是问题的解决方案 它是 TextView 的子类 实际上适用于椭圆化 我发现之前的答案中列出的 a
  • 使用 Cassandra 和 CQL3,如何在单个请求中插入整个宽行?

    我想将包含 50 000 列的单行插入到 Cassandra 1 2 8 中 在插入之前 我已准备好整行的所有数据 在内存中 0 1 2 49999 row id text text text text 列名是整数 允许切片进行分页 列值是
  • 全屏 Python TKinter 或 wxPython 窗口,但“停留在所有窗口的底部”?

    我想创建一个全屏面板 在视觉上阻止对屏幕上所有内容的访问 Ubuntu 11 10 中的桌面 菜单 Unity 面板等 但位于其他应用程序打开的窗口下方 这主要是为了让笔记本电脑具有儿童防护功能 我希望孩子 4 岁 能够访问一些选定的应用程
  • 如何在 Docker Postgres 脚本中创建用户/数据库

    我一直在尝试通过创建自定义用户和数据库来为开发 postgres 实例设置容器 我正在使用官方 postgres docker 镜像 https registry hub docker com postgres 在文档中 它指示您将 bas
  • Passenger 是否/可以使用 Mongrel 等集群?

    我只是好奇 Passenger 是否能够像 Mongrel 那样利用集群 如果是这样 我该如何专门运行带有集群的 Passenger 我正在使用 nginx 如果不是 它为何比 Mongrel 表现得那么好 Mongrel Cluster
  • 如何仅在存在定义的前缀的情况下将 CapitalCaseWords 替换为空格大写?

    参考信息 Notepad 正则表达式用空格大写替换大写字母 https stackoverflow com questions 64602444 notepad regex to replace capitalised case words
  • SimpleDateFormat 解析需要一小时(夏季使用 RFC 1123,GMT)

    我使用 SimpleDateFormat 和 RFC 1123 来格式化日期并解析日期 但是 parse format date 有时与原始日期相差一小时 代码如下 public static void main String args t
  • 获取数组中的所有组合

    假设我有以下数组 var arr new A B C 我怎样才能产生仅包含两个字符且没有两个相同字符的所有可能组合 例如AB会是一样的BA 例如 使用上面的数组将产生 AB AC BC 请注意 该示例已被简化 所需的数组和字符串的长度会更大
  • 锁定/解锁设备时相机示例错误

    我正在使用相机 并且使用文档中给出的完全相同的示例 http developer android com resources samples ApiDemos src com example android apis graphics Ca
  • 转换播放!从 MySQL 到 PostgreSQL 的框架演变

    我正在使用 plaframework 2 2 1 我做了一个项目 MySQL 但现在我想将我的项目转移到 PostgreSQL 但在重新创建数据库演变时遇到了一些错误 我的 mysql 的旧演变 1 sql 运行良好是 Created by
  • 如何设置绑定到Textbox的Label的可见性?

    我有三个绑定到标签的文本框 当我在文本框中键入内容时 文本框文本值将设置为标签 问题是我想在文本框为空白时将标签的可见性设置为折叠 反之亦然 如何在 WPF 中使用 Visibility Convert 来做到这一点 在 XAML 文件中
  • Angular2 使用 @Inputs 和 s

    我的页面中有一个子导航 它在公共主视图下方显示一些子视图 我想通过将一个对象传递给子视图