不同controller中的绑定在$scope上的相同逻辑如何复用?

raikkon
  • 90

举例:
    比如说,当我使用ng-router时,每个view都需要有分页操作,我现在的做法是在每个view的controller中都需要在 $scope上写一遍关于页面跳转的逻辑。然后绑定。我想问,是否有办法将这部分逻辑独立出来复用。

angular使用的版本为1.5

回复
阅读 2.7k
7 个回答

将重复的逻辑封装成service或者factory,注入到需要用到的controller中,调用就可以啦,
或者你可以尝试将分页这一整块封装成自定义指令,达到组件复用的目的

我的做法是把页码部分的模板提出来,设置固定的变量,在不同的controller里根据count来改变页码,这里面也没啥逻辑,就是通过变量动态的改变a表情的href和页码。这种方式可能也不太好,因为得固定变量名和初始化

littleLyon
  • 7.8k

分离一个独立的分页组件呗,而不是把分页都写在template中。

之后每个页面直接是所有这个分页组件就好了,对于分页跳转、分页显示规则等都可以在组件内实现,对外暴露一些规则参数和回调方法即可。由于你使用的1.5版本,可以使用module.component很方便的实现。

但是这么做的前提是,你们项目中的所有关于分页组件的交互逻辑都是规范的,所谓规范即所有分页均遵循的数据格式、请求参数格式等等,如果这些都不统一,那么组件本身就没有存在的价值了。

关于$scope的问题,你只需要知道,$scope归根结底也是一个对象而已,因此它也是可以被当做参数进行传递的,那么组件内使用的$scope到底是哪个$scope,完全可以暴露一个属性参数给组件调用者决定。

Pawny
  • 2
新手上路,请多包涵

划分组件, 组件编程的原则就是越细越好,越抽象越好,做好最大程度复用

复用性高并且独立的 封装成service或者factory 和页面逻辑强相关的就直接把方法挂在$rootScope上就行了 哪里都可以调用

能仔
  • 1
新手上路,请多包涵

封装成service或factory 注入到要复用的controller里面

1.5版本引入了组件的概念,类似于前面版本的自定义指令,但是两者是有区别的;题主举例的分页,就可以先创建一个新的module, 然后在module下写分页的自定义指令或者组件;对于分页这种组件,在大项目中使用的地方比较多的,就可以在主模块中注入分页的模块,然后在项目中就可以使用了。
现在开源的分页组件还是很多的比如 tm.pagination,题主可以去研究研究,这里不再详述。

宣传栏