AngularJS:在控制器之间传递参数

时间:2015-09-24 11:31:35

标签: javascript html angularjs

我想做什么:

我有一个ListView(或者更确切地说是一个手风琴),其中包含几个项目(为简单起见,我们假设它们具有唯一的idname)。对于每个项目,我想要包含指向详细信息视图的链接,以显示和编辑该项目的属性(id除外)。

Google搜索会返回多个结果,例如:Passing data between controllers in Angular JS?

据我所知,建议的解决方案包括:

ng-init :(请参阅Can you pass parameters to an AngularJS controller on creation?

我可以使用ng-init内的ng-repeat初始化列表中每个项目的参数。但是到目前为止,角度文档建议不要这样做:

  

ngInit唯一适当用于别名ngRepeat的特殊属性,如下面的演示所示。除了这种情况,您应该使用控制器而不是ngInit来初始化作用域上的值。

服务

建议使用服务在控制器之间共享全局变量。我已经通过使用服务来保存我的项目列表并使用服务调用来添加/删除或更改项目。我还实现了一个getItem(id)方法,我想从我的详细信息视图的控制器中调用它。但要做到这一点,我需要首先知道项目的ID!

通过$routeParams

传递值

Angular Phonecat Tutorial通过$routeParams传递参数解决了类似的问题。虽然这可行,但这意味着我必须在详细信息视图的链接中包含我的项目的id。用户可以轻松地更改链接,并以完全不同的项目的详细视图结束。如果可能,我宁愿不在我的详细信息视图的链接中公开内部id

这似乎是一个非常普遍的要求。我有什么最好的做法吗?

1 个答案:

答案 0 :(得分:1)

你有两个真正的选择(你已经确定):

  • 使用服务
  • 将信息作为网址的一部分传递

两者在技术上都是正确和可行的,但从语义和州的角度来看,我的偏好是使用网址。

由于您提供的是可点击链接,因此您可以链接到可链接的内容(即可以通过唯一URL标识的项目或状态)。如果您认为开放式手风琴项目更像是一个状态项目(而不是页面),那么您可以查看ui-router:https://github.com/angular-ui/ui-router

我不确定你为什么不反对在网址中提供商品ID。毕竟,任何有兴趣的人都可以使用开发人员工具在UI中查看任何信息。如果您不想在UI中使用数据库架构信息,那么可以使用各种ID混淆方法来解决此问题。