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 に答える