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

15 浏览
0 Comments

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

我尝试做的事情是:

我有一个ListView(或者说是手风琴),其中包含多个项目(为简单起见,假设这些项目具有唯一的id和name)。对于每个项目,我想要包含一个链接到详细视图的链接,以显示和编辑该项目的属性(id除外)。

在谷歌上搜索得到了一些结果,例如:在Angular JS中在控制器之间传递数据?

从我所了解的建议解决方案中,包括:

ng-init:我可以使用ng-init在ng-repeat中为我的List中的每个项目初始化一个参数。然而,目前Angular文档建议不要这样做:

除了下面的演示中的ngRepeat的特殊属性别名的使用之外,你应该使用控制器而不是ngInit来初始化作用域上的值。

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

通过$routeParams传递值:Angular Phonecat教程通过通过$routeParams传递参数来解决类似的问题。虽然这样可以工作,但这意味着我必须在链接到详细视图时包含我的项目id。用户可以轻松更改链接,并最终进入完全不同的项目的详细视图。如果可能的话,我宁愿不在我的详细视图链接中暴露内部id!


这似乎是一个非常常见的需求。我是否错过了任何最佳实践?

0
0 Comments

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

在AngularJS中,当我们需要在不同的控制器之间传递参数时,我们有两种主要的选择:使用服务或将信息作为URL的一部分传递。这两种方法在技术上都是正确且可行的,但从语义和状态的角度来看,我更倾向于使用URL。

既然你提供了一个可点击的链接,那么将链接到可以通过唯一URL标识的内容或状态是有意义的。如果你认为展开的手风琴项更像是一个状态项(而不是一个页面),那么你可以考虑使用ui-router插件来处理这个问题。

我不确定为什么你不愿意在URL中包含项目ID。毕竟,任何有兴趣的人都可以通过开发者工具在UI中查看任何信息。如果你不想在UI中展示数据库模式信息,那么有各种ID混淆的方法可以解决这个问题。

总之,无论你选择哪种方法,都可以在AngularJS中有效地传递参数。使用服务可以在控制器之间共享数据,而将信息作为URL的一部分传递则更符合语义和状态的概念。

0