【问题标题】:angularjs update another component when in another component is change [duplicate]当另一个组件发生变化时,angularjs会更新另一个组件[重复]
【发布时间】:2018-08-23 22:50:04
【问题描述】:

你好,我有这样的代码

<section>
  <component1></component1>
  <component2></component2>
</section>

现在在组件 1 中我有这样的保存表单的操作

export default function Component1Controller() {
  this.save = save.bind(this);
  function save(valid) {
    // save magic
  }
}

如果已保存,那么我想在第二个控制器中更新视图

export default function Component2Controller() {;
 function update() {
   //run update when component1 saved data
 }
}

没有功能 $on 或 $watch 可以做到这一点吗? 有什么建议吗?

【问题讨论】:

标签: angularjs


【解决方案1】:

当然。我没有你的确切例子可以使用,所以这当然是一个通用的解决方案。我不会输入整个服务,但方法如下:

// service setup...

const service = this;

service.registeredComponents = {};

service.register = (id, func) => {
  service.registeredComponents[id] = func;
};

service.callAllRegistered = (options /* whatever you want to pass */) => {
  Object.keys(service.registeredComponents).forEach((key) => service.registeredComponents[key](options));
};

service.deregister = (id) => {
  service.registeredComponents[id] = () => {};
  // or just delete the id, I did this instinctually, but you dont have to
}

这是一个非常简单的可观察模式,在许多场景中都很有用。我相信你应该没有问题适应你的用例。您可以将该服务注入任何组件,注册其“更新”方法,然后从任何其他组件调用所有已注册的“更新”方法。当组件被销毁时,不要忘记取消注册组件的任何“更新”方法。

【讨论】:

  • Angular 2+ 没有重新发明可观察对象,而是使用 RxJS。为了使迁移到 Angular 2+ 更容易,请在此处使用它们。见Push Values from a Service with RxJS
  • 感谢您的发布;但是,发帖人可能永远不会计划将这个项目迁移到 A2+,虽然是的,但他可以使用 RxJS,如果他的用例足够简单,我看不出有任何理由,特别是因为他仍然需要编写很多这段代码,如 RxJS 示例所示。
猜你喜欢
  • 2018-06-29
  • 2021-06-25
  • 1970-01-01
  • 2013-04-28
  • 2021-01-15
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多