AngularJs类似的控制器代码重用

时间:2015-03-10 19:03:51

标签: angularjs

我是AngularJS的新手,我正在努力确保我做的一切都正确。 我刚刚遇到了一些我认为可以改进的东西,所以我想我会在这里问一下。 我有2个控制器:

.controller('RecentOrdersController', ['OrderService', function (service) {
    var self = this; // store our controller in a variable

    self.loading = true; // This is what the ajax loading gif looks at to see if it should be displayed
    self.orders = []; // Our orders array

    service.recent(30).then(function (response) { // Get the 30 most recent orders
        for (var i = 0; i < response.data.length; i++) {
            var order = response.data[i]; // Store the order in a variable (for use later)
            var desciption = service.getDescription(order); // Get our description

            order.description = desciption; // Set our order description
            self.orders.push(order); // Push our order to our array
        }

        self.loading = false; // Set our loading flag to false (hide the ajax loading gif);
    });
}])

.controller('SyncFailureOrdersController', ['OrderService', function (service) {
    var self = this; // store our controller in a variable

    self.loading = true; // This is what the ajax loading gif looks at to see if it should be displayed
    self.orders = []; // Our orders array

    service.syncFailures(30).then(function (response) { // Get the 30 most sync failures
        for (var i = 0; i < response.data.length; i++) {
            var order = response.data[i]; // Store the order in a variable (for use later)
            var desciption = service.getDescription(order); // Get our description

            order.description = desciption; // Set our order description
            self.orders.push(order); // Push our order to our array
        }

        self.loading = false; // Set our loading flag to false (hide the ajax loading gif);
    });
}])

如您所见,这两个控制器几乎完全相同。唯一的区别是它们从同一服务中调用不同的功能。我想做的是(以某种方式)创建一个基本控制器或类似的东西,我不会那么多重复代码。

事实上,我的大多数控制器都有一个 self.loading 变量,所以如果我能创建一个总是暴露该变量的基本控制器,那将是件好事。

如果我有点意思,请告诉我如何才能使我的代码更好。

1 个答案:

答案 0 :(得分:1)

您应该创建一个service(或factory),您可以在其上放置共享的代码。然后每个控制器只需要使用不同的参数调用此服务。不要试图创建一个上位控制器,服务是要走的路。