AngularJS:在控制器之间传递参数
AngularJS: pass parameter between controllers
我要做的事情:
我有一个ListView(或者更确切地说是一个手风琴(,它包含几个项目(为了简单起见,我们假设这些项目具有唯一的id
和name
(。对于每个项目,我都希望包含一个到详细视图的链接,以显示和编辑该项目的属性(id
除外(。
为此在谷歌上搜索会返回几个结果,例如:在Angular JS中的控制器之间传递数据?
据我所知,建议的解决方案包括:
ng-init:(请参阅创建时能否将参数传递给AngularJS控制器?(
我可以在ng-repeat
中使用ng-init
为列表中的每个项目初始化一个参数。然而,到目前为止,有角度的文件建议不要这样做:
ngInit的唯一适当用途是对ngRepeat的特殊属性进行混叠,如下面的演示所示。除此之外,您应该使用控制器而不是ngInit来初始化作用域上的值。
服务:
建议使用服务在控制器之间共享全局变量。我已经在使用一项服务来保存我的项目列表,并使用对该服务的调用来添加/删除或更改项目。我还实现了一个getItem(id)
方法,我想从详细视图的控制器调用它。但要做到这一点,我需要首先知道物品的id!
通过$routeParams
传递值
Angular Phonecat教程通过$routeParams
传递参数来解决类似的问题。虽然这会起作用,但这意味着我必须在详细信息视图的链接中包含我的项目的id
。用户可以很容易地更改链接,并最终进入完全不同项目的详细信息视图。如果可能的话,我宁愿不在我的详细视图链接中公开内部id
!
这似乎是一个很常见的要求。我缺少什么最佳实践吗?
您有两个真正的替代方案(您已经确定(:
- 使用服务
- 将信息作为url的一部分传递
两者在技术上都是正确和可行的,但从语义和状态的角度来看,我更喜欢使用url。
由于您提供了一个可点击的链接,因此您链接到可链接的东西(即可以通过唯一url标识的项目或状态(是有意义的。如果你认为一个打开的手风琴项目更像是一个状态项目(而不是一个页面(,那么你可以看看ui路由器:https://github.com/angular-ui/ui-router
我不知道你为什么不喜欢在url中包含物品ID。毕竟,任何感兴趣的人都可以使用开发工具在UI中看到任何信息。如果您不想在UI中显示数据库模式信息,那么有各种ID模糊处理方法可以解决这个问题。
- 函数参数中的数据与指定变量之间的任何性能差异
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在aspx页面之间传递参数
- 在JQuery中的HTML5页面之间传递参数
- 两者之间有什么区别..函数中的参数和参数
- js 函数之间使用参数的区别
- 在更改时选择,插入类似函数的参数或指令之间的差异
- 单击时在参数之间切换的最佳方式
- AngularJS 函数,带和不带 '$' 的参数之间的差异
- 将返回值作为主干视图方法之间的参数传递
- $interval的时间参数是否可以在间隔之间动态更改
- Javascript 正则表达式切断斜杠之间的最后一个参数
- 使用hapijs/joi验证参数之间的关系
- 如何最轻松地在JQuery Mobile(JQM)嵌入式/内部页面之间传递URL参数/数据
- Javascript中的参数和参数之间的联系是什么
- 如何在两个onclick事件之间传递参数
- 在视图之间传递参数以显示信息
- 在页面之间传递jQuery参数
- ExtJS 5-在窗口之间传递参数
- 使用ajax从同一个javascript函数多次调用,对象在函数体和ajax成功回调之间的参数不相同