AngularJS:正确使用控制器和工厂

时间:2017-01-25 10:01:20

标签: angularjs

我是一名AngularJS新生儿,当我使用Angular获得新项目时,已有代码由其他开发人员编写。当我开始深入研究代码时,我看到了两种方式的View-Controller-Factory" connection"实现。 第一个是在Angular教程中:

控制器:

 app.controller('dashboardController', function (dashboardFactory){
    /*Controller as implementation*/
    this.widgets = dashboardFactory.getWidgets();
})

厂:

app.factory('dashboardFactory', function (){
var widgets = []; 
    return {       
        getWidgets: function () {
            return widgets;
        },
}

在第二个所有控制器中,函数作为工厂的指针,控制器本身具有工厂变量指针:

控制器:

app.controller('mapController', function (mapFactory){
 this.mapFactory= mapFactory;
this.getRowStatus = mapFactory.getRowStatus;
this.getRowTooltip = mapFactory.getRawTooltip;
})

厂:

app.factory('mapFactory', function (){ 
        getRowStatus: function (grid, row) {
            var result = '';
            var currentStatus = row.entity.ONLINE_STATUS;
            switch (currentStatus) {
                case 1:
                    result = 'carInMotionLight';
                    break;
                case 2:
                    result = 'carInIdleLight';
                    break;
                case 4:
                    result = 'carAlertLight';
                    break;
            }
            return result;
        },

        getRawTooltip: function (grid, row) {
            var result = 'Engine off';
            var currentStatus = row.entity.ONLINE_STATUS;
            switch (currentStatus) {
                case 1:
                    result = 'In motion';
                    break;
                case 2:
                    result = 'In idle';
                    break;
                case 4:
                    result = 'Alert';
                    break;
            }
            return result;
        },
});

在第二个实现中,控制器看起来更干净,在工厂内部功能中,您处于控制器范围内,如果需要调用另一个工厂函数,则必须使用已定义的工厂变量。

我没有发现使用第一个或第二个实现的任何正面或负面反馈都有效并且都提供相同的结果。 那你觉得怎么样?哪一个更好用?

1 个答案:

答案 0 :(得分:1)

在我们与AngularJS的商业合作中,我们试图保持控制器的“薄”状态。并将大量逻辑推入服务/工厂。我们将ES6与AngularJS 1.5一起使用,有时候很难保持这种方式,但总的来说我们尝试在服务中编写大量的函数式编程,因此这些方法都是DRY。

控制器不能这么干,因为它们与特定页面绑定(我想这是在服务中利用大量逻辑的论据)。