2016-07-06 51 views
1

我从角路线迁移到UI的路由器,我试着去弄清楚什么是构建最好的选择以下情形:角UI-路由器最佳实践:共享数据命名视图之间

我有一个由两个嵌套元素组成的通用面板同时显示:A FORM(呈现在左边)和一个简单的LIST(呈现在右边)。

形式用于编辑,甚至在列表中创建一个新的项目(该操作是由throught服务使得AJAX调用)

列表显示了所有项目,我可以选择一个他们并点击“编辑”,然后该项目转到窗体,我将能够操纵/更新它。

这里是我的代码:

 .state('mt.demos', { 
      abstract: true, 
      url: '/demos', 
      views : { 
        '[email protected]' : { 
        templateUrl: '....demos.html' 
       } 
      } 
     }) 

    .state('mt.panel', { 
      url: '', 
      views: { 
       '[email protected]': { 
        templateUrl: '...form.html', 
        controller : 'formController', 
        controllerAs : 'vm', 
       }, 
       '[email protected]': { 
        templateUrl: '...list.html', 
        controller : 'listController', 
        controllerAs : 'vm', 

       } 
      } 
     }) 

到目前为止,我结束了与2种选择:

  1. 创建共享数据服务(这似乎是最容易被接受的答案,由于它的Singleton行为 - 但看看这篇文章末尾的注1
  2. 创建一个父控制器,这样每个嵌套状态就可以访问像列表或要编辑的项目这样的父属性。当我点击“编辑项目”时,listController会更新父级的范围,formController会随着这些数据而改变。

注1:当然要检索列表并更新项目,我已经使用了一个名为demoService的服务。此服务仅用于ajax请求。所以,如果最好的决定是上面显示的选项1,我相信我应该用一个新的提案创建一项新服务,对吗?或者在这个相同的服务中存储一些局部变量并不坏。 这个新服务将有列表和项目本身,所以当我点击编辑时,我会更新服务“项目”属性?

回答

0

我想你已经有了使用服务来存储数据的答案。

关于带有新提案的新服务,虽然我不完全确定“提案”的含义,但我假设您指的是与当前不同字段的不同列表?

在这种情况下,这取决于您的代码的可重用性。如果您的表单足够相似,或者您可以推广它,那么共享相同的服务可能会很好,所以您不必重写函数。列表和所选项目可以作为服务中的不同变量存储。

或者,您还可以将它们存储在不同的服务中,并将它们的常用功能写入其他服务中。

+0

感谢您的快速响应! ;)新的“提案”只是指出我所有名为xxxService的文件都只用于与服务器通信。我从未使用这些文件来存储不同控制器之间的共享数据。所以回到问题中,我的服务名为demoService用于我的其他应用程序,共享数据(列表和项目)仅由listController和itemController使用。因此,其他将调用demoService的控制器将不会使用此共享数据(它们仅用于从服务器检索数据)。 – Germano

+0

我认为它应该是不同的服务,然后,列表和项目在一个,而在另一个阿贾克斯。列表服务可以在需要获取数据时调用ajax服务。但是,从我个人的经验来看,将所有不同的ajax url存储在一个文件中并不是一个好主意,它会一直增长到有一天它没有意义。我发现保持各自的服务更清洁。 – Icycool

+0

更新:我最终做了一项新的服务来分享数据并处理一些表单问题。感谢您的帮助 – Germano

相关问题