1

我有一个功能可以很好地单独包含在控制器中,以修改 $scope 的数据,但是当我尝试使用注入工厂将其添加到范围时......它无法运行。同一工厂返回的其他数据返回正常。

这是原始功能:

  $scope.sortByRooms = function () {
                    var amount = 0;
                    for (var i = 0; i < $scope.customers.length; i++) {
                        amount += $scope.customers[i].area * $scope.customers[i].price;
                    }
                    if (amount < 100 && amount > 0) {
                        $scope.alertBadPrice = true;
                        $scope.contact.totalQuote = amount;
                        return amount;
                    } else {
                        $scope.contact.totalQuote = amount;
                        $scope.alertBadPrice = false;
                        return amount;
                    }
                };

但是像这样作为工厂对象返回......

app.controller('blahblah', [$scope, factoryObject, function($scope, factoryObject) { 
    $scope.customers = factoryObject.list();
    $scope.sortByRooms = factoryObject.sortByRooms();

无法工作。其他返回的数据对象(如客户)工作正常,但不是我的函数。

我应该像这样返回我的函数吗?

sortByRooms = function (obj, obj1, obj3) {
                var amount = 0;
                for (var i = 0; i < obj.length; i++) {
                    amount += obj[i].area * obj[i].price;
                }
                if (amount < 100 && amount > 0) {
                    obj1 = true;
                    obj3.totalQuote = amount;
                    return amount;
                } else {
                    obj1 = false;
 obj3.totalQuote = amount;

                    return amount;
                }
            };

或者我应该保持原始功能相同,但将作用域注入工厂对象,如下所示:

gapp.factory('factoryObj',[ $scope, function ($scope) {....}
4

1 回答 1

0

工厂$scope永远不应该使用。看起来你真的需要将你的工作分成更小的函数。第一个看起来像一个实用函数,它根据客户信息计算总数:

totalAmount = function(customers){
    var amount = 0;
    for (var i=0; i<customers.length; i++){
        amount += customers[i].area * customers[i].price;
    }
    return amount;
};

然后,您应该有其他功能来决定如何处理该金额。sortByRooms另外,当没有进行排序时,为什么要命名该函数?

于 2015-11-01T00:08:40.770 回答