Angular工厂:如何返回在$ scope上运行的函数?

时间:2015-10-31 23:08:29

标签: javascript angularjs factories

我已经有一个功能,可以单独使用控制器来修改$ 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) {....}

1 个答案:

答案 0 :(得分: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