2017-04-17 3 views
0

コントローラと工場がある場所にアプリケーションを作成しました。私は、この配列に要素のidをプッシュしたいファクトリの内部に配列を持っています。しかし、配列に要素をプッシュしようとすると、エラーが発生します。イオンアプリケーションエラー:array.push()は関数ではありません

"favorites.push is not a function"

以下は、コントローラと工場を見つけることができます。読書をありがとう: 工場:

.factory('favoriteFactory',['$resource', 'baseURL','$localStorage', function ($resource, baseURL, $localStorage) { 
      var favFac = {}; 
      var favorites = $localStorage.get('favorites', []); 
      favFac.addFavorites = function (index) { 
      for(var i=0; i<favorites.length; i++){ 
       if(favorites[i].id == index) 
       return 
      } 
       favorites.push({id: index}); 
       $localStorage.storeObject('favorites',favorites) 
      } 
      favFac.deleteFromFavorites = function (index) { 
      for (var i = 0; i < favorites.length; i++) { 
       if (favorites[i].id == index) { 
       favorites.splice(i, 1); 
       } 
      } 
      $localStorage.storeObject('favorites', favorites) 
      }; 

      favFac.getFavorites = function() { 
      return $localStorage.getObject('favorites',[]); 
      }; 
      return favFac 
     }]) 

コントローラー:

.controller('MenuController', ['$scope', 'menuFactory', 'favoriteFactory','baseURL', '$ionicListDelegate', 'dishes', '$localStorage', 
     function($scope, menuFactory,favoriteFactory, baseURL, $ionicListDelegate, dishes, $localStorage) { 


     $scope.baseURL = baseURL; 
     $scope.tab = 1; 
     $scope.filtText = ''; 
     $scope.showDetails = false; 
     $scope.showMenu = true; 
     $scope.message = "Loading ..."; 
     $scope.addFavorite = function (index) { 
      console.log("index:" +index); 
      favoriteFactory.addFavorites(index); 
      $ionicListDelegate.closeOptionButtons(); 

     }; 
     $scope.dishes = dishes; 

      $scope.select = function(setTab) { 
       $scope.tab = setTab; 

       if (setTab === 2) { 
       $scope.filtText = "appetizer"; 
       } 
       else if (setTab === 3) { 
       $scope.filtText = "mains"; 
       } 
       else if (setTab === 4) { 
       $scope.filtText = "dessert"; 
       } 
       else { 
       $scope.filtText = ""; 
       } 
       }; 
    $scope.isSelected = function (checkTab) { 
     return ($scope.tab === checkTab); 
    }; 

    $scope.toggleDetails = function() { 
     $scope.showDetails = !$scope.showDetails; 
    }; 
    }]) 

答えて

0

を私はあなたがngStorageを使用していると仮定。 getメソッドには2番目のパラメータはありません。したがって、既定値の[](空の配列)を返そうとすると、単にundefinedが返され、配列ではなくundefinedにプッシュしようとしています。

ngStorageのソースコードはgetのための二番目のパラメータを示しています https://github.com/gsklee/ngStorage/blob/master/ngStorage.js

ので、この行:

var favorites = $localStorage.get('favorites') || []; 
+0

は、デフォルトでは、応答をありがとう:

var favorites = $localStorage.get('favorites', []); 

は、このであるべき2つのパラメータを取ることができます。 2番目はあなたが提供できるデフォルト値です。問題は私が同じエラーを持っていることを変更していることです。私は単純な配列を作成しています。 –

+0

これは、私が同じことを作成したコードから2番目の部分です。function(key、defaultValue){ return $ window.localStorage [key] || defaultValue; }、 –

+0

私は自分の機能について話していることを知っています。それは同じことをしていると私はそのデフォルト値に送信します。 var favorites = $ localStorage.get( 'お気に入り')|| []; –

関連する問題