AngularJS:路线和控制器的最佳实践

时间:2015-12-04 21:42:15

标签: angularjs model-view-controller angularjs-ng-route angular-controller

在我们公司,我们目前正在开发一个单页面的Web应用程序。用户可以使用数据登录并填充他们的个人资料,并与其他订阅者共享(这是一个社交网络应用程序)。 现在,我已经想到了这个架构:

  • 用户数据由UserService提供,使用REST API恢复配置文件信息;
  • 配置文件相关页面由唯一控制器(ProfileController);
  • 管理

我的问题是:将路由(例如“view-profile”)与特定控制器方法(ProfileController.viewProfile)相关联的最佳方法是什么?这是AngularJS中的正确模式吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

进一步调查我发现实现我想要的结果的最佳方法是使用状态配置中的resolve,如本文所述:https://scotch.io/tutorials/making-skinny-angularjs-controllers

编辑: 我会尝试解释一下。我想要实现的是将特定的应用程序状态路由到控制器方法,以避免每次访问控制器时预加载大量数据。让我们说我的ui-router

中的这种情况
.state('view-profile', {
   url: '/view-profile',
   templateUrl: 'components/profile/profile.html',
   controller: 'ProfileController'
})
[...]
.state('edit-profile', {
   url: '/edit-profile',
   templateUrl: 'components/profile/edit-profile.html',
   controller: 'ProfileController'   
})

由于ProfileController可能会做很多事情,而不是与编辑/视图相关的东西,我想设置一个特定的控制器方法,当我导航到这些网址时调用它。 在其他MVC框架中,您可以将路由关联到特定的控制器方法,因此您将拥有

route: /edit-profile -> resolvesAs: ProfileController.editProfile(args)

不幸的是,在AngularJS 1.4中没有真正的方法可以做到这一点,至少不使用ui-router。 但幸运的是,我们可以使用ui-router配置中的resolve属性来避免为特定路由预加载无用的数据。