在控制器之间传递数据

前端之家收集整理的这篇文章主要介绍了在控制器之间传递数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我说要学习AngularJS,来自许多不同的MV *框架。
我喜欢的框架,但我有麻烦在控制器之间传递数据。

假设我有一个屏幕有一些输入(input.html)和一个控制器,让我们说InputCtrl。
在此视图上有一个按钮,将您带到另一个屏幕,让我们说使用控制器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-首先工作。
您首先创建控制器,有机会将其置于正确的状态;然后创建视图。

现在,在AngularJS,我处理这样:

var self = this;
 onClick = function(){
          self.$locationService.path('approve');       
 }

>这就像View-first。
你说到哪个视图/路由来导航,Controller是由框架创建的。

我发现很难控制创建的控制器的状态,并传递数据到它。
我看到并尝试了以下方法,但都有它自己的问题在我看来:

>将共享服务注入InputCtrl& ApproveCtrl并将所有要共享的数据放在此服务上

>这看起来像一个肮脏的工作;共享服务中的状态变为全局状态,而我只需要它将数据传递到ApproveCtrl
>这个共享服务的生命周期比我需要的更长 – 只是为了传递数据到ApproveCtrl

>传递$ routeParams中的数据

>当传递了很多参数时,这会变得很杂乱

>使用$ scope事件

>在概念上,这不是我会使用事件 – 我只需要传递数据到ApproveCtrl,没有事件是
>这是相当麻烦;我必须先发送一个事件给父母,然后将它广播给它的孩子

我在这里缺少什么?我创造了太多的小控制器?
我试图从其他框架持有太多的习惯在这里?

在结构方面AngularJS比MVC更多模块化。

Classic MVC描述了3个简单的层,它们以这样的方式相互交互,即控制器使用视图模型化(而模型不应该直接使用View,反之亦然)。

在Angular中,您可以有多个,一些完全可选的实体,它们可以通过多种方式在彼此之间进行交互,例如:

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

>使用difference between this and $scope在控制器之间直接发送消息
>发送消息using events
>发送消息using shared system(注意:与上述相同的链接,回答显示两种技术)

要么

>使用AJAX后端发送邮件
>使用外部系统发送信息(如MQ)

…还有很多。由于其多样性,Angular允许开发人员/设计师选择他们最舒适的方式并进行。我建议阅读AngularJS Developer Guide,在那里你可以找到一些常见问题的祝福的解决方案。

猜你在找的Angularjs相关文章