gpt4 book ai didi

angularjs - 在 Controller 之间传递数据

转载 作者:行者123 更新时间:2023-12-02 19:04:50 24 4
gpt4 key购买 nike

我要学习 AngularJS,它来自许多不同的 MV* 框架。我喜欢这个框架,但是我在 Controller 之间传递数据时遇到了麻烦。

假设我有一个带有一些输入(input.html)和一个 Controller 的屏幕,比如说InputCtrl。
该 View 上有一个按钮,可将您带到另一个屏幕,假设使用 Controller ApproveCtrl 批准 (approve.html)。
此 ApproveCtrl 需要来自 InputCtrl 的数据。这似乎是大型应用程序中非常常见的场景。

在我以前的 MV* 框架中,这将像(伪代码)一样处理:

   var self = this;
onClick = function() {
var approveCtrl = DI.resolve(ApproveCtrl);
approveCtrl.property1 = self.property1;
approveCtrl.property1 = self.property2;
self.router.show(approveCtrl);
}
  • 它会像 Controller 优先一样工作。您首先创建 Controller ,有机会将其置于正确的状态;之后 View 被创建。

现在,在 AngularJS 中,我的处理方式如下:

 var self = this;
onClick = function(){
self.$locationService.path('approve');
}
  • 这就像 View 优先一样。您指定要导航到哪个 View /路线, Controller 将由框架创建。

我发现很难控制创建的 Controller 的状态并向其传递数据。我已经看到并尝试过以下方法,但在我看来,所有方法都有其自身的问题:

  1. 将共享服务注入(inject)到InputCtrl和ApproveCtrl中,并将所有要共享的数据放在该服务上
    • 这看起来像是一个肮脏的解决方法;共享服务中的状态变成全局状态,而我只需要它来将数据传递给 ApproveCtrl
    • 此共享服务的生命周期比我需要的要长得多 - 只是将数据传递到 ApproveCtrl
  2. 在$routeParams中传递数据
    • 当传递大量参数时,这会变得非常困惑
  3. 使用$scope事件
    • 从概念上讲,这不是我使用事件的目的 - 我只需要将数据传递给 ApproveCtrl,不需要任何事件
    • 这相当麻烦;我必须首先向父级发送一个事件,然后将其广播给它的子级

我在这里遗漏了什么吗?我是否创建了太多的小型 Controller ?我是否试图过多地保留其他框架的习惯?

最佳答案

就结构而言,AngularJS 比 MVC 更加模块化。

经典 MVC 描述了 3 个简单的层,它们以 Controller 将模型与 View 缝合在一起的方式相互作用(并且模型不应该直接与 View 一起工作,反之亦然)。

在 Angular 中,您可以拥有多个(一些完全可选)实体,它们可以通过多种方式相互交互,例如:

Possible Interactions

这就是为什么有多种方法可以在不同实体之间传输数据。您可以:

  • 使用 AJAX 后端发送消息
  • 使用外部系统发送消息(例如 MQ )

...还有更多。由于其多样性,Angular 允许开发人员/设计人员选择他们最舒服的方式并继续下去。我建议阅读AngularJS Developer Guide在这里您可以找到一些常见问题的幸运解决方案。

关于angularjs - 在 Controller 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com