【问题标题】:Is it wrong to store all shared data in the parent component?将所有共享数据存储在父组件中是错误的吗?
【发布时间】:2018-08-02 18:43:12
【问题描述】:

我正在使用 AngularJS 1.6。

我在一个共享数据存储在顶级组件中的系统中工作。子组件通过以下方式访问父组件:

require: {
  'parentView': '?^'
}

并使用{{thisView.parentView.variable}}this.parentView.changeVar(var); 访问数据

这似乎是一个反模式。似乎“正确”的解决方案是使用服务来存储和更改数据。

parentView 方法的实际问题是什么?

感谢您的帮助。

【问题讨论】:

    标签: javascript angularjs architecture components


    【解决方案1】:

    不比较服务和父控制器。服务很棒,但数据最终将不得不在范围内使用。如果该范围恰好是父控制器,则子控制器也应该能够访问它,而不是创建自己的另一个范围。

    【讨论】:

    • 比较的是,从概念上讲,它们都用作存储数据的单例。每个组件创建自己的范围 AFAIK,数据可以传递给子组件,子组件可以调用传递给它的父回调。以上以及服务都是推荐的方法。我正在使用的应用程序中的方法是通过访问父范围直接访问数据。尽管我试图弄清楚它是否需要重构,但这似乎是“错误的”。
    • 是的,它们都可以存储数据。就个人而言,我将所有数据存储在服务中,但只会根据需要将这些数据附加到范围内。服务主要用于在不是父/子的指令和控制器之间进行通信。因此,如果它是父/子,最好保持父作用域的使用,而不是在子作用域中创建另一个对象。
    【解决方案2】:

    我看到的主要问题是子组件在这种情况下很难重用,因为它们与父组件紧密耦合。 所以这就是为什么用数据注入服务更可取并且更容易通过单元测试进行测试。并且单元测试可以防止您的代码成为遗留代码。

    【讨论】:

    • 所以如果一个组件在应用程序中的逻辑位置肯定是在特定的父级之下,那么你看到这两种方法有什么不同吗?
    • 抱歉,刚刚注意到它是 angular 1。我的意思是子组件稍后可能会与其他父组件一起使用,它所需要的只是输入数据,而不知道这些数据在父范围内的位置。如果重复使用,您应该调整父级以将数据存储在特定变量中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2018-10-21
    • 2020-02-24
    • 2020-07-16
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多