【问题标题】:angular broastcast event controller not ready角度广播事件控制器未准备好
【发布时间】:2013-08-07 17:42:43
【问题描述】:

我有一个带有搜索框和结果列表的简单应用。搜索框有自己的控制器SearchCtrl,结果列表还有另一个DocListCtrl。当用户提交并且DocListCtrl 监听并更新结果时,SearchCtrl 会发出一个事件。如果用户输入查询并提交,它工作正常 - 但是,我的问题是当用户复制/粘贴 URL 时,例如“/app/search?q=foo”,搜索事件在之前广播DocListCtrl 已准备就绪,因此不会更新结果。

所以一般来说,有没有办法让一个控制器声明对另一个控制器的依赖?我应该让SearchCtrl 将数据保存在DocListCtrl 最终加载时可以查看的位置吗?

【问题讨论】:

  • 嗨@porfuse。您为此使用2个控制器的任何原因?你不能用一个控制器完成吗?
  • @vin 搜索 ctrl 是独立的,因为它将持续存在于应用程序的其他区域,例如“详细信息”视图也将具有搜索表单。此外,搜索 ctrl 仅处理解析查询和从服务器获取数据,DocListCtrl 处理分页和其他一些事情
  • 你还需要广播活动吗?听起来 DocListCtrl 是 SearchCtrl 的子对象,你不能获取父范围并查找它吗?
  • @Neil 如何将一个控制器声明为另一个控制器的子级?
  • 引用已经回答的人 - 默认情况下,子作用域原型继承自父作用域,因此您已经可以访问子作用域中的父控制器属性。

标签: javascript angularjs dependency-injection publish-subscribe


【解决方案1】:

正如您已经发现的那样,应用程序的架构不应使控制器实例化的顺序很重要。更好的方法是使用服务来管理搜索结果,可以将其注入到两个控制器中。

服务示例:https://stackoverflow.com/a/15390245/215945

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多