在多个控制器中使用角度工厂

时间:2015-09-15 16:20:02

标签: angular-ui-grid angularjs-factory

我正在使用角度ui网格。起初我在控制器中实现了它,并且在我的所有自定义之后它工作正常。当我使用多个网格时,我不能每次都写一个长控制器。所以,我把它改成了工厂。我在工厂中保留了常用功能,并在控制器中保留了列定义和数据。现在,当我在多个控制器中使用此工厂时,最后一个控制器将覆盖所有其他控制器。 1)在工厂制作这个网格是否正确? 2)如果是,我该如何克服这个问题? 3)通过对这个网格使用工厂,我的gridObj.gridApi.pagination.on抛出错误(gridObj是我要返回的单个对象)。

欢迎任何建议。非常感谢。

1 个答案:

答案 0 :(得分:0)

您应该使用指令。工厂创建一个Instant(请参阅Angular Provider Documentation并且不会创建私有范围,您无需覆盖您的数据。

  

注意:Angular中的所有服务都是单例。

但是,如果你想要的话,Directives提供私有范围并在每次用HTML调用时创建新的实例。

//directive
scope: { // this option creates isolated scopes
  something : '=',
},

我创建了一个展示可能设置的Plunkr。有关更多书面详细信息,请参阅我的answer from few days ago

之后您的HTML可能会如下所示

<my-grid options="all.firstOptions" class="grid"></my-grid>

my-grid是您的指令,options=""是您的特殊设置(以及您希望在指令中使用的任何其他设置)。在您的指令中,您声明默认设置并将其与特殊设置合并。

scope.gridOptions = {
          data: scope.options.data, //private scoped from options : '=',
          columnDefs: scope.options.colDef || defaultColDef, // optional setting or default setting
          // ... some more default data
        };

如果您有任何具体问题,请与我们联系。