【问题标题】:Angular 2 Header component Title change dynamically according to the stateAngular 2 Header 组件标题根据状态动态变化
【发布时间】:2017-04-09 00:36:32
【问题描述】:

我有一个使用 Angular 2 的设计,其中标题组件、导航栏组件和所有其他组件都加载的正文组件。 如下图所示

  1. 标题
  2. 导航
  3. 加载其他组件的位置(此部分可能已嵌套 组件/子组件)

所以这里基本上,在标题组件中,我想显示当前状态。而在当前状态的底部,我想展示用户的之前的状态

问题: 为了实现这一点,我在 angular 中使用了组件交互技术。

  • 一旦重新加载应用程序,它会显示当前和
    的默认值 后面的状态。

  • 在用户直接登陆特定页面(也是正文中的子组件)的情况下,它显示默认 当前和返回状态的值。

由于 Angular 遵循组件架构,我想要一种更好的方式来实现此功能。

如果我直接进入图片中第 3 节的子组件,我的标题组件应该根据标题组件中的特定页面获取标题/当前状态。

我的解决方案是在 ngOnInit 传递当前状态值时在每个组件中。我还解析了以前的状态值。因此,标头组件按原样显示,因为服务是使用此链接中的技术编写的 - https://angular.io/docs/ts/latest/cookbook/component-communication.html

但在某些情况下,我从服务器获取数据并且必须更新标头当前状态。在那里我看到根本没有显示。

需要一个好的解决方案的帮助。

PS - 由于这个机制在不同的文件中并且有点复杂,我无法更新代码模板

【问题讨论】:

标签: angular angular2-routing angular2-services angular2-components ngcomponentrouter


【解决方案1】:

虽然看起来很简单,但是使用子组件和输入、输出变量就可以实现。

用于显示服务内容的子组件

@Component({
  selector: 'title',
  template: `
    <div> {{title}}</div> 
  `,
})
export class TitleComponent implements ngOnChanges{

  @Input() title:string="";
  @Output() titleChanged:EventEmitter<string>=new EventEmitter<string>();
  constructor(){
  //service call goes here
  }
  ngOnChanges(){
  console.log(this.val);
  this.titleChanged.emit(this.title);
  } 

}

父组件将是

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Hello {{name}}</h2>
      <title (titleChanged)="changedTitle($event)" [title]="title"></title>
    </div>
  `,
})
export class App {
  name:string; 
  title:string="some title";
  val:string;
  constructor() {
    this.val="";

  }

   changedTitle(va;){
   this.title="val"
    console.log(val);

  }
}

解释:

  1. 进行服务调用并更改标题值时。
  2. 在更改输入属性时,将自动触发 ngOnChanges。
  3. titleChanged 是 Output() 变量,并在执行 ngOnChanges 时发出一个值。
  4. 触发titleChanged时,会执行changedTitle()中的关联方法。

LIVE DEMO

注意:为了显示这是有效的,我使用了一个文本框并将其分配给 div 元素,您可以在路由组件的构造函数中修改它。

【讨论】:

  • 谢谢。这种通过组件交互使用的技术很有帮助。我真正关心的是无论何时进行服务器调用。我已经使用服务完成了这项工作。假设这种方法也可能有效。 “唯一我无法解决的是将用户重定向到之前的状态。”
  • 是的,我需要帮助来捕捉路由器上的先前状态。也是先前状态的先前状态。所以,我可以实现将用户重定向到以前的状态。感谢您的帮助。
  • 如果此答案对您有帮助,请将其标记为答案。为了保留以前的路由器状态,您需要使用任何插件实现状态管理网
  • @SaiyaffFarouk 这对您有帮助还是需要更多信息?
猜你喜欢
  • 2017-05-29
  • 2017-06-07
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 2020-12-22
相关资源
最近更新 更多